• 防止SQL注入


    一、防止SQL注入

    什么是SQL注入攻击?

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

    寻找SQL注入的方法:

    1.通过get请求

    2.通过post请求

    3.其他http请求,如cookie

    常见的SQL注入问题:数据库查询参数的类型转换处理

    1. 转义字符处理不当

    Talk is cheap,Show me the code.
    多说无益,代码亮出来吧!

    1 // 构造动态SQL语句
    2 $sql = "select * from tbl where field = '$_GET['input']'";
    3 
    4 // 执行SQL语句
    5 $res = mysql_query($sql);

    测试:
    在下边的网址后边加一个单引号,就会报数据库错误
    http://testphp.vulnweb.com/ar...

    2. 类型处理不当

    1 // 构造动态SQL语句
    2 $sql = "select * from tbl where field = $_GET['user_id']";
    3 
    4 // 执行SQL语句
    5  $res = mysql_query($sql);

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

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

    该命令会获取数据库管理员的密码。
    处理方法:
    需要将客户端传过来的数据进行类型强制转换,而后再查询

    1 $user_id = (int)$_GET['user_id'];
    2 
    3 "select * from tbl where userid = {$user_id}";

    3. 查询语句组织不当

    1 user.php?table=user&

    4. 错误处理不当

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

     1 // 构造动态查询语句
     2 
     3 $getid = "select * from tbl where userid > 1";
     4 
     5 // 执行SQL语句
     6 
     7 $res = mysql_query($getid) or die('<pre>'.mysql_error().'</pre>');
     8 
     9 5. 多个提交处理不当
    10 
    11 // 参数是否是一个字符串
    12 
    13 if(is_string($_GET["param"])){}

    数据入库时将转换单引号、双引号、反斜杠为实体

    在入库的时候如果不过滤 ' ""这样的东西,这样会使数据库报错,或者注入等问题。
    先将字符串用htmlspecialchars()转换为实体后存储到数据库,然后从数据库读出来时htmlspecialchars_decode()转为HTML标签。
    htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。
    函数原型:

    1 htmlspecialchars(string,quotestyle,character-set)

    预定义的字符是:

    1 & (和号)    成为 &amp;
    2 
    3 ” (双引号)  成为 &quot;
    4 
    5 ‘ (单引号)  成为 &#039;
    6 
    7 < (小于)    成为 &lt;
    8 
    9 > (大于)    成为 &gt;

    htmlspecialchars_decode() 函数把一些预定义的 HTML 实体转换为字符(和htmlspecialchars相反)。
    函数原型:

    1 htmlspecialchars_decode(string,quotestyle)

    链接:https://mp.weixin.qq.com/s/E_N7AYeojASvwaRpEV6oWw

  • 相关阅读:
    多种 网页文本编辑器 分析
    struts2 令牌 实现源代码 JSP
    ibatis 数据库时间 插入数据
    Eclipse/Myeclipse生成serialVersionUID方法
    SSM框架整合遇到的问题
    搭建Elasticsearch5.6.8 分布式集群
    使用SuperWebSocket 构建实时 Web 应用
    HAPROXY
    .NET面试题系列(二)GC
    MongoDB-3.4集群搭建:分片
  • 原文地址:https://www.cnblogs.com/clubs/p/11442692.html
Copyright © 2020-2023  润新知