📜  如何防止PHP中的 SQL 注入?

📅  最后修改于: 2022-05-13 01:56:35.051000             🧑  作者: Mango

如何防止PHP中的 SQL 注入?

在本文中,我们将讨论如何防止PHP中的 SQL 注入。本主题的先决条件是您的计算机中有 XAMPP。

为什么会发生 SQL 注入?

SQL 注入是一种代码注入技术,用于攻击数据驱动的应用程序,其中恶意 SQL 语句被插入到输入字段中执行(例如,将数据库内容转储给攻击者)。

在这类技术中,黑客或攻击者使用一些特殊字符将 SQL 查询转换为新的 SQL 查询,攻击者可以通过输入更多种类的关键字来操纵查询。

让我们制作一个 SQL 注入场景,然后我们将学习如何修复它。

第 1 步:那么,让我们从创建数据库开始——

CREATE DATABASE GFG;

第 2 步:使用此数据库 –

USE GFG;

第 3 步:在 GFG 数据库中创建登录凭据表 -

CREATE TABLE users( 
    id int(10) PRIMARY KEY AUTO_INCREMENT,
    username VARCHAR(255),
    password VARCHAR(255)
);

第 4 步:将一些数据插入数据库 -

INSERT INTO users VALUES(1, 'idevesh', '1234');
INSERT INTO users VALUES(2, 'geeksforgeeks', 'gfg');

插入后的数据

第 5 步:现在为登录页面创建一个PHP脚本 -

(a) 创建一个数据库连接文件(PHP)——

PHP


PHP


  

    GFG SQL Injection Article
    

  

    
        

LOGIN FOR SQL INJECTION

        
               

                                              

               

                                              

               

                             

        
    
  


PHP
 0) {
    echo "Login Success";
}
else {
    echo "Wrong User id or password";
}
?>


PHP
 0) {
    echo "Login Success";
}
else {
    echo "Wrong User id or password";
}
  
?>


(b)创建一个 HTML 表单以供用户输入 -

PHP



  

    GFG SQL Injection Article
    

  

    
        

LOGIN FOR SQL INJECTION

        
               

                                              

               

                                              

               

                             

        
    
  

(c)创建文件 verifyLogin。用于验证用户输入的PHP -

PHP

 0) {
    echo "Login Success";
}
else {
    echo "Wrong User id or password";
}
?>

第 6 步:现在我们将传递一个中毒密码以进入用户配置文件 -

Poisoned password = ' or 'a'='a

因此,如您所见,上述中毒字符串可以使任何用户登录 geeksforgeeks 用户名,因此这称为 SQL 注入。

现在为了避免这种类型的 SQL 注入,我们需要使用mysqli_real_escape_string()函数清理密码输入和用户名输入。

mysqli_real_escape_string()函数将特殊字符作为来自用户的输入,并且不将它们视为查询使用。

所以验证登录的新代码。 PHP将是 -

PHP

 0) {
    echo "Login Success";
}
else {
    echo "Wrong User id or password";
}
  
?>