如果攻击者向

Master the art of fan database management together.
Post Reply
Mimaktsa10
Posts: 112
Joined: Tue Dec 24, 2024 3:08 am

如果攻击者向

Post by Mimaktsa10 »

$login 发送“admin”OR 1="1",则即使不知道密码,他也将被允许以管理员登录进入站点:

从用户中选择 id,其中 login="admin" 或 1="1" 并且密码=""

如果他写“OR 1=1 OR 1="1”,那么他将以数据库中找到的第一个用户身份登录。

也就是说,为了防止 SQL 注入,您需要确保数据不会被解释为表达式。您要么需要将值强制为预期的类型(如果预期是数字,则为 intval、floatval 函数),要么简单地将它们全部括在引号中并转义其中包含的特殊字符。

PHP 有一个特殊的函数 mysql_real_escape_string,允许您在将文本插入 MySQL 查询之前对其进行转义。有时会使用 mysql_escape_string、addslashes 和 htmlspecialchars,但 塞浦路斯号码数据 它们无效或只是针对其他目的(我们正在讨论最后一个)。

SQL

bp.blogspot.com

PHP 语言有所谓的“魔术引号”。此功能允许 PHP 在来自外部的数据的所有引号(以及现有的反斜杠)前自动添加反斜杠。这使得脚本变得安全,这非常好,特别是如果开发人员自己没有注意安全性的话。

但这会影响一行中的所有数据,包括那些没有设计为接收数据库请求的数据。没有人希望在网站上看到“你好,达达尼昂”这样的问候语。因此,有必要使用 stripslashes 功能清理数据或在服务器设置中完全禁用“魔术引号”。

事实上,magic_quotes 并没有为网站提供绝对的保护。他们将无法阻止使用上述示例中的“WHERE id='.$message_id”构造的注入 - 无论如何,参数周围没有引号,攻击者不必插入结束引号。此外,数据库连接的编码也没有被考虑进去。并且PHP语言开发人员本身也不建议使用“魔术引号”。自 PHP 版本 6 起,它们不再受支持。

因此,不要依赖 magic_quotes,重要的是在将数据插入 SQL 查询之前使用 mysql_real_escape_string / pg_escape_string 函数处理数据,并确保在 SQL 查询中引用值。 SQL 查询中涉及的所有数据都应以这种方式处理,即使它来自可信来源。

一些专家建议为此使用特殊的 SQL 查询构造函数,它们本身提供了查询和数据所需的分离。

跨站脚本

跨站脚本

XSS(Cross Site Scripting,“跨站点脚本”,缩写XSS是为了避免与CSS,样式表混淆)是一种攻击,其本质是在网站上发布一段特殊的脚本(比如说,用JavaScript),当有人打开该网站的页面时执行该脚本。由于这直接发生在浏览器中,因此脚本可以访问 cookie 中的信息,还可以代表用户执行操作(如果他以其登录名登录) - 例如,读取、写入和删除消息。

这意味着这次攻击主要对用户可以注册并留下一些个人信息的网站构成威胁,例如论坛、留言板、博客等。然而,包含用于查看用户输入数据的模块的管理员界面也应该保持警惕。例如,来自反馈、订单或评论表单的消息、有关访问者来自的地址(HTTP 请求字段“Referer”)以及他们使用的浏览器(字段“User-Agent”)的统计信息。

如何保护网站免受 XSS 攻击?有必要仔细过滤网站上发布的传入数据。基本上,将符号“<”和“>”替换为“<”就足够了和“>”分别是(php函数htmlspecialchars)。这会导致用户输入的文本失去其 HTML 格式,并且其中包含的脚本不再是恶意的。

问题在于,并非每个程序员都愿意忽略 HTML 标记——这非常激进并且不适合访问者。它们中的大多数仍然为用户提供以某种方式设计信息的机会:试验字体、突出显示引语、添加色彩强调、插入图片和表格。在这种情况下,通过开发和实施部分 HTML 清理算法来确保安全性。
Post Reply