Page 1 of 1

这允许您过滤掉所有包含单词 s

Posted: Thu Dec 05, 2024 11:29 am
by rubinaakter
本文介绍了 SQL 注入的工作原理、此类攻击的危险以及如何保护自己。应该提前指出​​的是,通过正确的方法,您可以轻松消除攻击者成功的哪怕是最微小的机会。不受控制的 SQL 注入攻击可能会对您的 Web 服务器造成严重损坏。

什么是 SQL 注入及其工作原理
SQL 注入是攻击运行数据库 (DB) 的网站和软件的常见方法。该方法的本质是注入任意SQL代码,最终让黑客可以通过多种方式与数据库数据进行交互:

阅读内容;
删除数据;
添加新数据。
此外,在某些情况下,攻击者可以获得读取和写入服务器上的本地文件、执行任意命令等的访问权限。

这是通过以下方式完成的。大多数网站都有存储所有信息的数据库。当访问者尝试加载页面时,请求将发送到数据库。这很好,但用户可以更改查询 - 在撰写评论时、在搜索期间、甚至在从一个页面移动到另一页面时。这些查询是 SQL 注入的好机会。触发脚本创建者无意的操作。让我们看一个例子。

妻子在厨房的桌子上留了一张纸条,要求丈夫给圣诞老人一些现金。一个可能的 SQL 查询可能如下所示:

从钱包里拿出 10 欧元,放在桌子上送给圣诞老人
复制
做完这些,女人把纸条留在桌子上,就去上班了。尼古拉的妹妹玛莎醒来,看到了纸条,用类似的笔迹加上了几个字:

从钱包里拿出 10 欧元,放在桌子上送给圣诞老人或玛丽
复制
当她的丈夫醒来时,他立即认为两个孩子都知道这些钱的用途。当他看到玛莎时,他告诉她钱就在桌子上——她应该拿走。

玛莎得到了不公平的待遇,但最终她得到了钱,而尼古拉斯却一无所有。简而言之,这是一个 SQL 注入的简单示例。

现在让我们看一个更现实的例子。这是搜索中标准 ID 查询的样子:

从帖子中选择 id、title、content,其中 title 类似于'%Benutzers_Anfrage%'
复制
现在我们假设用户输入以下组合而不是标准关键字:

1%'; DROP TABLE 帖子 LIKE '%;
复制
结果将是数据库开发人员无法预测的可行查询:

从帖子中选择 id、title、content,其中 title LIKE '%1%';删除表帖子 LIKE '%%'
复制
这可以处理任何涉及输入用户数据的请求 - 假设开发人员或安全专家没有提供必要的安全机制。在这种情况下,只需删除用户请求中的所有引号就足以解决问题。以下是防止 SQL 注入的主要方法。

防止sql注入

在软件代码级别保护您的网站免受 SQL 注入
使用 PHP 编程语言时,可以使用以下函数避免引号:

mysql_real_escape_string;
mysqli_real_escape_string。
只要数据库查询中用到的每一个变量都被过滤了,就肯定没有问题。唯一重要的是过滤发生在 CMS 或程序代码级别。

问题是创建不安全的数据库查询比创建带过滤的安全查询花费的时间要少得多。因此,许多网站都容易受到攻击。

配置 Web 服务器的保护
如果无法精炼代码,可以过滤掉脚本开头的所有 REQUEST 值。为此,请使用以下代码:

如果(!function_exists(“清洁”)){

如果 (get_magic_quotes_gpc()) {

函数 magicquotes_Stripslashes(&$value,$key) {

$值=斜线($值);

}

$gpc = 数组(&$_COOKIE,&$_REQUEST);

array_walk_recursive($gpc,'magicquotes_Stripslashes');

}

函数清理(&$value,$key){

//此函数打破所有引号。

$值 = mysql_real_escape_string($值);

}

}

$req = 数组(&$_REQUEST);

array_walk_recursive($req,'clean');
复制
使用 PHP 7 时,应使用 mysqli_real_escape_string 函数,因为从该版本开始已删除 mysql 扩展。使用 clean 函数和下面的所有代码隐藏引号。

接下来
返回 403;

}
复制
这允许您过滤掉所有包含单词 select 和 concat 带引 印度尼西亚电话号码列表
号的查询。这是一个明确的迹象,表明正在尝试 SQL 注入,所有此类请求都应该被阻止。

Image


还可以在 Apache Web 服务器级别阻止可疑地址。问题是,阻止一些常用的 SQL 关键字也可能导致阻止常见的用户查询,因此这里需要小心。如果您确定这是必要的,您应该在 VitualHost 部分添加几行: