您的位置:58脚本 > SQLite SQL注入

SQLite SQL注入

2023-04-11 14:32 SQLite教程

 SQLite SQL注入

如果您的站点允许用户通过网页输入,并将输入内容插入到 SQLite 数据库中,这个时候您就面临着一个被称为 SQL 注入的安全问题。本章节将向您讲解如何防止这种情况的发生,确保脚本和 SQLite 语句的安全。

注入通常在请求用户输入时发生,比如需要用户输入姓名,但用户却输入了一个 SQLite 语句,而这语句就会在不知不觉中在数据库上运行。

永远不要相信用户提供的数据,所以只处理通过验证的数据,这项规则是通过模式匹配来完成的。在下面的实例中,用户名 username 被限制为字母数字字符或者下划线,长度必须在 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";
}

为了演示这个问题,假设考虑此摘录:To demonstrate the problem, consider this excerpt:

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

函数调用是为了从用户表中检索 name 列与用户指定的名称相匹配的记录。正常情况下,$name 只包含字母数字字符或者空格,比如字符串 ilia。但在这里,向 $name 追加了一个全新的查询,这个对数据库的调用将会造成灾难性的问题:注入的 DELETE 查询会删除 users 的所有记录。

虽然已经存在有不允许查询堆叠或在单个函数调用中执行多个查询的数据库接口,如果尝试堆叠查询,则会调用失败,但 SQLite 和 PostgreSQL 里仍进行堆叠查询,即执行在一个字符串中提供的所有查询,这会导致严重的安全问题。

防止 SQL 注入

在脚本语言中,比如 PERL 和 PHP,您可以巧妙地处理所有的转义字符。编程语言 PHP 提供了字符串函数 sqlite_escape_string() 来转义对于 SQLite 来说比较特殊的输入字符。

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

虽然编码使得插入数据变得安全,但是它会呈现简单的文本比较,在查询中,对于包含二进制数据的列,LIKE 子句是不可用的。

请注意,addslashes() 不应该被用在 SQLite 查询中引用字符串,它会在检索数据时导致奇怪的结果。


阅读全文
以上是58脚本为你收集整理的 SQLite SQL注入全部内容。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。
相关文章
  •  SQLite PRAGMA

    SQLite PRAGMA

    SQLite 的 PRAGMA 命令是一个特殊的命令,可以用在 SQLite 环境内控制各种环境变量和状态标志。一个 PRAGMA 值可以被读取,也可...

  • mariadb 函数 MariaDB 空值

    mariadb 函数 MariaDB 空值

    使用NULL值时,请记住它们是未知值。 它们不是空字符串或零,它们是有效值。 在表创建中,列规范允许将它们设置为接受空值,或拒...

  • mysql临时表会占用运行内存吗? MariaDB 临时表

    mysql临时表会占用运行内存吗? MariaDB 临时表

    由于速度或一次性数据,一些操作可能受益于临时表。 临时表的生命期在会话终止时结束,无论是从命令提示符,PHP脚本还是通过客户...

  • mariadb删除数据库操作 MariaDB 删除数据库

    mariadb删除数据库操作 MariaDB 删除数据库

    在MariaDB中创建或删除数据库需要特权,通常仅授予root用户或管理员。 在这些帐户下,您有两个删除数据库的选项:mysqladmin二进...

  •  PostgreSQL tsm_system_rows

    PostgreSQL tsm_system_rows

    F.41.1. 示例 tsm_system_rows模块提供了表采样方法 SYSTEM_ROWS,它可以用在SELECT命令的TABLESAMPLE子句中。这种表采样方...

  •  PostgreSQL vacuumlo

    PostgreSQL vacuumlo

    vacuumlo — 从PostgreSQL数据库中移除孤立的大对象大纲vacuumlo [option...] dbname...描述 vacuumlo是一个从PostgreSQL数据库...

  •  PostgreSQL 限制

    PostgreSQL 限制

    表K.1描述了PostgreSQL的各种硬性限制。 但是,在达到绝对硬限制之前,可能会先受到现实的限制,例如性能限制或可用磁盘空间。表...

  • oraclefetch的用法 Oracle Fetch子句

    oraclefetch的用法 Oracle Fetch子句

    FETCH 子句在 Oracle 中可以用来限制查询返回的行数,本教程将教大家如何使用 FETCH 子句。OracleFETCH 子句语法以下说明了行限...

  • oracle in函数 Oracle Initcap()函数

    oracle in函数 Oracle Initcap()函数

    在Oracle中,Initcap()函数可以将每个单词中的第一个字符设置为大写,其余的设置为小写。下面就是Initcap()函数的语法及具体用法...

  •  MySQL DATE_ADD() 函数

    MySQL DATE_ADD() 函数

    MySQL Date 函数定义和用法 DATE_ADD() 函数向日期添加指定的时间间隔。 语法DATE_ADD(date,INTERVAL expr type) date 参数是合...

© 2024 58脚本 58jiaoben.com 版权所有 联系我们
桂ICP备12005667号-28 Powered by CMS