SQL注入漏洞

SQL注入漏洞原理:需要从页面传入数据时,在所传的参数后面加"1' or '1'='1"

对付SQL注入漏洞有2种方式:过滤敏感字符和使用参数化SQL

1.过滤敏感字符

攻击者一般需要在输入框中输入的文本中一般包含or、and、select、delete之类的字符串片段,所以在拼接SQL之前检查用户提交的文本中是否含有这些敏感字符串。若有,则终止操作。例:

string user = txtUser.getText();
string password = txtPassword.getText();
//检验是否包含or/and/select/delete
if(user.contains("or","and","select","delete")){
  ShowMessage("可能存在注入漏洞攻击!");
  return;
}
if(password.contains("or","and","select","delete")){
  ShowMessage("可能存在注入漏洞攻击!");
  return;
}
rs = ExuecuteQuery("select (FPassword='"+password+"') AS PwdCorrect FROM user WHERE User = '"+password+"'");
if(rs.getBool("PwdCorrect")==true){
  ShowMessage("密码正确");
}else{
  ShowMessage("密码错误");
}

2.参数化SQL

java、C#等语言提供了参数化SQL机制,使用参数化SQL开发人员为在运行时才能确定的参数值设置占位符,在执行时再指定这些占位符所代表的的值。如

string user = txtUser.getText();
string password = txtPassword.getText();
query = CreateQuery("select (FPassword=:password) AS PwdCorrect FROM user WHERE User =:user");
query.setParameter(":password",password);
query.setParameter(":user",user);
if(rs.getBool("PwdCorrect")==true){
  ShowMessage("密码正确");
}else{
  ShowMessage("密码错误");
}

参数化SQL是运行时才能确定的用户名和密码设置了占位符,然后在运行时再设定占位符的值,在执行时java、C#会直接将参数化SQL及对应的参数值传递给DBMS,在DBMS中会将参数值当成一个普通的值来处理,而不是将他们拼接到参数化SQL中,因此,从根本上避免了SQL注入漏洞攻击。

阅读更多
文章标签: SQL注入漏洞
个人分类: 杂记
想对作者说点什么? 我来说一句

SQL注入漏洞全接触

2011年05月17日 168KB 下载

没有更多推荐了,返回首页

不良信息举报

SQL注入漏洞

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭