SQL注入攻击

什么是SQL注入攻击?

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


  1. SQL注入原理:

    SQL注入攻击_第1张图片

web架构通常为三层:

表示层、逻辑层、存储层


SQL注入过程:

  1. 转义字符处理不当

   // 构造动态SQL语句

  $sql = "select * from tbl where field = '$_GET['input']'";

  // 执行SQL语句

  $res = mysql_query($sql);

测试:

在下边的网址后边加一个单引号,就会报数据库错误

http://testphp.vulnweb.com/artists.php?artist=1

2.类型处理不当

   // 构造动态SQL语句

  $sql = "select * from tbl where field = $_GET['user_id']";

  // 执行SQL语句

  $res = mysql_query($sql);

Mysql内置了一个命令,可以读取文件

* Union all select load_file('/etc/passwd')--


select * from tbl where userid = 1 union all select load_file('etc/passwd')--

该命令会获取数据库管理员的密码


3.查询语句组织不当

user.php?table=user&


4.错误处理不当

即将站点的错误信息暴漏给用户,这样非常危险。


// 构造动态查询语句

$getid = "select * from tbl where userid > 1";

// 执行SQL语句

$res = mysql_query($getid) or die('<pre>'.mysql_error().'</pre>');

5.多个提交处理不当

// 参数是否是一个字符串

if(is_string($_GET["param"])){}


问题:

1.如果web站点禁止输入单引号字符,是否可以避免SQL注入?

SQL注入攻击_第2张图片

SQL注入攻击_第3张图片

寻找SQL注入的方法:

  1. 通过get请求

  2. 通过post请求

  3. 其他http请求,如cookie



你可能感兴趣的:(sql注入)