SQLiteInjection(注入)

SQLiteInjection(注入) 首页 / SQLite入门教程 / SQLiteInjection(注入)

如果您通过网页获取用户输入并将其插入到SQLite数据库中,则很可能会遇到称为SQL注入的安全问题。在本章中,您将学习如何防止这种情况的发生并帮助您保护脚本和SQLite语句。

永远不要信任用户提供的数据,仅在验证后才处理这些数据;在以下示例中,用户名被限制为字母数字字符和下划线,并且长度介于8到20个字符之间-根据需要修改这些规则。

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)){
   $db=new SQLiteDatabase('filename');
   $result=@$db->query("SELECT * FROM users WHERE username=$matches[0]");
} else {
   echo "username not accepted";
}

为了演示问题,请考虑以下示例-

$name="Qadir'; DELETE FROM users;";
@$db->query("SELECT * FROM users WHERE username='{$name}'");

该函数调用应该从用户表中检索一条记录,其中名称列与用户指定的名称匹配。在正常情况下, $name 仅包含字母数字字符,可能还包含空格,例如字符串ilia。但是,在这种情况下,通过在$name后面附加一个全新的查询,对数据库的调用将变成灾难:注入的DELETE查询将删除用户中的所有记录。

防止SQL注入

您可以使用PERL和PHP等脚本语言来巧妙地处理所有转义字符。编程语言PHP提供了功能 string sqlite_escape_string()来转义SQLite特有的输入字符。

if (get_magic_quotes_gpc()) {
   $name=sqlite_escape_string($name);
}
$result=@$db->query("SELECT * FROM users WHERE username='{$name}'");

注意- addslashes()不应用于引用SQLite查询的字符串;检索数据时会导致奇怪的输出。

祝学习愉快!(内容编辑有误?请选中要编辑内容 -> 右键 -> 修改 -> 提交!)

教程推荐

程序员职业规划手册 -〔雪梅〕

AI大模型系统实战 -〔Tyler〕

结构思考力 · 透过结构看问题解决 -〔李忠秋〕

零基础GPT应用入门课 -〔林健(键盘)〕

代码之丑 -〔郑晔〕

MongoDB高手课 -〔唐建法(TJ)〕

DevOps实战笔记 -〔石雪峰〕

推荐系统三十六式 -〔刑无刀〕

微服务架构核心20讲 -〔杨波〕

好记忆不如烂笔头。留下您的足迹吧 :)