如何防止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";
}
?>