加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

防止sql注入的方法

(2012-11-16 16:45:40)
标签:

杂谈

分类: java相关

1. 定义:

所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。


2. 防止SQL注入的方法:

A:使用PreparedStatement代替Statement

1)使用PreparedStatement 比Statement的代码的可读性和可维护性更好.
2)PreparedStatement尽最大可能提高性能.
3)最重要的一点是PreparedStatement极大地提高系统的安全性.

  1. sql="select * from admin where username=? and password=?";
  2. PreparedStatement psmt= con.prepareStatement(sql);
  3. psmt.setString(1,username);
  4. psmt.setString(2,password);
  5. ResultSet rs = psmt.executeQuery();
  6. if(rs.next){
  7. rs.close();
  8. con.close();
  9. return false;
  10. }
  11. else{
  12. rs.close();
  13. con.close();
  14. return true;
  15. }
 sql="select * from admin where username=? and password=?";
 PreparedStatement psmt= con.prepareStatement(sql);
 psmt.setString(1,username);
 psmt.setString(2,password);
 ResultSet rs = psmt.executeQuery();
 if(rs.next){
 rs.close();
 con.close();
 return false;
 }
 else{
 rs.close();
 con.close();
 return true;
 }

B: 使用字符串过滤

  1. public static String filterContent(String content){
  2. String flt ="'|and|exec|insert|select|delete|update|count|*|%
  3. |chr|mid|master|truncate|char|declare|;|or|-|+|,";
  4. Stringfilter[] = flt.split("|");
  5. for(int i=0;i<</SPAN>filter.length ; i++)
  6. {
  7. content.replace(filter[i], "");
  8. }
  9. return content;
  10. }
public static String filterContent(String content){
   String flt ="'|and|exec|insert|select|delete|update|count|*|%                   

|chr|mid|master|truncate|char|declare|;|or|-|+|,";
   Stringfilter[] = flt.split("|");
 for(int i=0;i

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有