zoukankan      html  css  js  c++  java
  • PHP之防御sql注入攻击的方式

    长期以来,web的安全性存在着巨大的争议与挑战。其中,sql注入就是一种常见的一种攻击方法,开发人员普遍的做法就是不停的过滤,转义参数,可是我们php大法天生弱类型的机制,总是让黑客有机可乘,绕过防御与防御总是在明争暗斗。

    兄弟连(www.itxdl.cn)PHP大牛说过一句话,在一个程序中,60%的代码都应该是在进行各种防御。

    其实,现在来看,防御sql注入其实并不需要进行各种参数过滤,以下将开启干货模式!

    PHP5.x开始引入了一种新的mysql操作方式-----mysqli,在php中也有一项相应的操作方式叫做PHP预处理。采用面向对象的方式来进行参数化绑定操作,由于对数据库操作的模式驱动不同,因此可以非常有效的防御sql注入。

    首先,我们先来看一段代码例子

    php代码:

    <!--?php

    $root = "root";

    $pwd = "root";

    $host = "localhost";

    $database =  "database";

    $conn = new mysqli($host,$root,$pwd,$database);//面向对象的方式实例化一个对象

    $keywords = $_GET['keywords'];

    $search_sql = "select content from mykey where title = ? ";//其中的?是一个占位符

    $search_action = $conn --->prepare($search_sql);//进行预处理操作

    $search_action ->bind_param("s",$keywords);//绑定参数,第一个参数表示为上面预处理的的占位符的数量和每一个参数的数据类型,s为字符串,i为整形,d为双精度小数,有几个参数,就写几个s或d或i,比如说iiii,ssss,sidi这样的。然后后面就是有几个参数就写几个要绑定的变量,比如bind_param('sss',$username,$password,$code);

    $search_action ->bind_result($content);//将结果绑定在相对应的变量上,比如你select了username,password,你就可以写bind_result($usernmae,$password);

    $search_action ->execute();//执行sql操作

    while($search_action ->fetch()){

    echo $content.'<br>';

    }

    $search_action ->free_result();//释放内存

    $search_action ->close();//结束这个实例化

    ?>

    上面是php预处理中一个非常简单的例子,它内置的其他函数能很方便我们的开发速度,那么看到这里,很多人可能还是不明白,有人可能想问,你这个绑定参数是不是还是在拼凑sql语句?如果是拼凑语句,那还不是会产生注入吗?

    这就要从他的操作原理来解释了,其实它在prepare操作中,就已经在数据库中,执行了语句,以后的绑定参数和执行,只不过是再传递数据进去而已,所以根本不会和sql语句拼接,也就自然不会将危险代码执行。因此,在这种模式下sql注入就能很有效的被防御了。

    在php预处理的类中有很多很好用的操作,具体的兄弟连将会在以后的文章中为大家总结一些常用的php预处理的开发语句。

  • 相关阅读:
    大魔头视频解析 线路收集(持续更新)
    如何配置双网?
    pom配置资源文件中的二进制文件乱码打不开如excel
    漏洞复现-CVE-2017-7525-Jackson远程代码执行
    漏洞复现-CVE-2018-1000861-jenkins远程命令执行
    漏洞复现-wooyun-2015-110216-Elasticsearch写入webshell
    漏洞复现-CVE-2015-5531-ElasticSearch 目录穿越
    漏洞复现-nginx_parsing_vulnerability-nginx解析漏洞
    漏洞复现-insecure-configuration-nginx不安全的配置
    漏洞复现-CVE-2018-1273-Spring Data Commons 远程命令执行
  • 原文地址:https://www.cnblogs.com/lampbrotherIT/p/5702952.html
Copyright © 2011-2022 走看看