SQL 注入

永远都别信任客户端

神马是 SQL注入

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

具体都有哪些 SQL注入 手段

注入木马

1
SELECT '<? php eval($_POST[cmd]);?>' INTO OUTFILE '/home/www/trojan.php';

篡改当前sql语句

1
SELECT * FROM table_name WHERE id = 1 OR SELECT * FROM user_table;

执行多条sql语句

1
SELECT * FROM table_name WHERE id = 1;DELETE FROM table_name;

一个简单粗暴的参数过滤函数(PHP)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
function params_filter($str)
{
if (empty($str)) return false;
$str = str_ireplace('insert','',$str);
$str = str_ireplace('delete','',$str);
$str = str_ireplace('update','',$str);
$str = str_ireplace('select','',$str);
$str = str_ireplace('join','',$str);
$str = str_ireplace('union','',$str);
$str = str_ireplace('where','',$str);
$str = str_ireplace('like','',$str);
$str = str_ireplace('drop','',$str);
$str = str_ireplace('create','',$str);
$str = str_ireplace('modify','',$str);
$str = str_ireplace('rename','',$str);
$str = str_ireplace('alter','',$str);
$str = str_ireplace('or','',$str);
$str = str_ireplace('and','',$str);
$str = str_ireplace('into','',$str);
$str = str_ireplace('-','',$str);
return $str;
}

注意事项

  • 永远不要信任用户的输入。对用户的输入进行校验,可以通过正则表达式,或限制长度;对单引号和 双”-“进行转换等。
  • 永远不要使用动态拼装sql,可以使用参数化的sql或者直接使用存储过程进行数据查询存取。
  • 永远不要使用管理员权限的数据库连接,为每个应用使用单独的权限有限的数据库连接。
  • 不要把机密信息直接存放,加密或者hash掉密码和敏感的信息。
  • 应用的异常信息应该给出尽可能少的提示,最好使用自定义的错误信息对原始错误信息进行包装
  • sql注入的检测方法一般采取辅助软件或网站平台来检测,软件一般采用sql注入检测工具jsky,网站平台就有亿思网站安全平台检测工具。MDCSOFT SCAN等。采用MDCSOFT-IPS可以有效的防御SQL注入,XSS攻击等。

参考链接: