Rumah > pembangunan bahagian belakang > tutorial php > SQL注入漏洞与防范详解

SQL注入漏洞与防范详解

小云云
Lepaskan: 2023-03-21 12:22:02
asal
2238 orang telah melayarinya

SQL注入的原理:在原有SQL语句上附加一段SQL代码,构造特殊的SQL语句,利用程序自身的权限实现所需要的操作。

假如现在有一张user表:

uidusernamepwd

1adminadmin222

2custome123456

现在执行一个登录操作:

  1. <?php  
        $conn=mysqli_connect("localhost","root","root","test");  
        // 连接数据库test  
        if (!$conn) {  
            # code...判断链接是否成功  
            echo "连接失败!";  
            echo mysqli_connect_error();  
            exit();  
        }  
        mysqli_query($conn,"set names utf8");  
        // 指定编码格式  
        $user = $_GET[&#39;user&#39;];
        $pwd = $_GET[&#39;pwd&#39;];
        $sql="select * from
     user where username = &#39;{$user}&#39; and pwd = &#39;{$pwd}&#39;";  
        // sql语句  
        $result=mysqli_query($conn,$sql);  
        // 执行sql语句,将执行结果返回到结果集中  
        $row=mysqli_fetch_array($result);  
        // 从结果集中取得一行作为数组  
        echo "<pre class="brush:php;toolbar:false">";  
        print_r($row);  
    ?>
    Salin selepas log masuk

如上代码执行的是一个简单的登录操作,在浏览器中执行这个程序:localhost/test/login.php?user=admin&pwd=admin222,执行的SQL语句相当于:select * from user where username= 'admin' and pwd = 'admin222',将会得到执行结果。

如果请求:localhost/test/login.php?user=admin&pwd=admin,由于密码与用户名不匹配导致没有任何查询结果。即:SQL语句:select * from user where username= 'admin' and pwd = 'admin'是查询不到结果的。那么,如果是SQL语句:select * from user where username= 'admin' and pwd = 'admin' or 1 = 1;呢?你可以自己试一下,这个你可以得到如下:

uidusernamepwd

1adminadmin222

2custome123456

如果在客户端访问:localhost/test/login.php?user=admin&pwd=admin%20or%201=1呢?

直接就绕过了验证,获取到了数据库里面的admin用户的信息了。这就是一个简单的SQL注入。

SQL注入的防范:

(1)如果是整形变量用intval()函数或(int)把所有传入的参数转化为一个数值。

(2)对于字符型变量,用addslashes()把所有'(单引号)、"(双引号)、\(反斜线)和 (空格)转为含有反斜线的字符。

(3)转义或过滤一些特殊字符,如%等。

(4)做好数据备份。。。

相关推荐:

php关于反序列化对象注入漏洞

分享五个著名的SQL注入漏洞扫描工具

php防止sql注入漏洞代码

Atas ialah kandungan terperinci SQL注入漏洞与防范详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan