跨站请求伪造 (CSRF)
描述 :
基本思想是诱使用户访问一个页面,在该页面上,他的浏览器将向您攻击的 CMS 发起 POST 或 GET 请求。
假设您知道由 CMS 提供支持的站点管理员的电子邮件。通过电子邮件向他发送一些有趣的网页,其中包含您想要的任何内容。在此页面中,您将使用 CMS 管理面板使用的数据制作一个表单,以创建新的管理员用户。将这些数据发送到网站管理面板,结果将显示在您网页的隐藏 iframe 中。瞧,您已经创建了自己的管理员帐户。
如何预防:
通常的方法是在所有形式中生成随机的短期(1500 万到小时)随机数。当您的 CMS 收到表单数据时,它会首先检查 nonce 是否正常。如果不是,则不使用数据。
CMS 示例:
更多信息 :
在维基百科页面和OWASP 项目上。
密码存储错误
描述 :
想象一下,您的数据库被黑客入侵并发布在类似 wikileak 的网站上。知道您的大部分用户在许多网站上使用相同的登录名和密码,您是否希望它们易于获取?
不可以。如果您的数据库数据公开,您需要减轻损失。
如何预防:
- 第一个想法是散列它们。这是一个坏主意,因为彩虹表(例如,即使哈希不是 md5 而是 sha512)。
- 第二个想法:在散列之前添加一个唯一的随机盐,这样黑客就必须暴力破解每个密码。问题是,黑客可以快速计算大量哈希。
- 所以,目前的想法是让哈希密码变慢:你不在乎,因为你不经常这样做。但是当攻击者从每毫秒生成的 1000 个哈希值增加到 1 个时,他会哭。
为了简化这个过程,您可以使用一些密码大师开发的库phpass。
CMS 示例:
更多信息 :
phpass页面。
跨站脚本 (XSS)
描述
这些攻击的目的是让您的网站显示一些脚本,这些脚本将由您的合法用户执行。
你有两种:持久或不持久。第一个通常来自您的用户可以保存的东西,另一个依靠发送的请求给出的参数。这是一个例子,不是持久的:
<?php
if(!is_numeric($_GET['id'])){
die('The id ('.$_GET['id'].') is not valid');
}
?>
现在你的攻击者可以发送链接,如http://www.example.com/vulnerable.php?id=<script>alert('XSS')</script>
如何预防
您需要过滤输出到客户端的所有内容。如果您不想让用户保存任何 html ,最简单的方法是使用htmlspecialchars 。但是,当您让他们输出 html(他们自己的 html 或从 bbcode 等其他东西生成的某些 html)时,您必须非常小心。这是一个使用 img 标签的“onerror”事件的旧示例:vBulletin 漏洞。或者你有旧的 Myspace 的 Samy。
CMS 示例:
更多信息 :
您可以查看wikipedia和OWASP。您在hackers页面上也有很多 XSS 向量。
邮件头注入
描述 :
邮件标头由 CRLF ( \r\n
) 序列分隔。当您使用一些用户数据发送邮件时(例如将其用于 From: 或 To:),它们可以注入更多标头。有了这个,他们可以从您的服务器发送匿名邮件。
如何预防:
过滤标题中的所有、\n
和\r
字符。%0a
%0d
CMS 示例:
更多信息 :
像往常一样,维基百科是一个好的开始。
SQL 注入
描述 :
老经典。当您使用直接用户输入形成 SQL 查询时,就会发生这种情况。如果此输入是按需要制作的,则用户可以完全按照自己的意愿进行操作。
如何预防:
简单的。不要使用用户输入形成 SQL 查询。使用参数化查询。考虑任何不是您自己编码的输入作为用户输入,例如来自文件系统、您自己的数据库或 Web 服务。
CMS 示例:
更多信息 :
Wikipedia和OWASP在这个主题上有非常好的页面。
Http响应拆分
描述 :
与电子邮件标头一样,http 标头由 CLRF 序列分隔。如果您的应用程序使用用户输入来输出标题,他们可以使用它来制作自己的标题。
如何预防:
就像电子邮件一样,过滤器、过滤器\n
和\r
用户%0a
输入%0d
的字符在将其用作标题的一部分之前。您还可以对标题进行urlencode 。
CMS 示例:
更多信息 :
我会让你猜测一下,你可以在哪里找到关于这种攻击的大量信息。OWASP和维基百科。
会话劫持
描述 :
在这个例子中,攻击者想要使用另一个合法(并且希望是经过身份验证的)用户的会话。为此,他可以更改自己的会话 cookie 以匹配受害者的 cookie,也可以让受害者使用他(攻击者)自己的会话 id。
如何预防:
这里没有什么是完美的: - 如果攻击者窃取了受害者的 cookie,您可以检查用户会话是否与用户 IP 匹配。但是,如果合法用户使用一些经常更改 IP 的代理,这可能会使您的网站变得无用。- 如果攻击者让用户使用他自己的会话 ID,只需使用session_regenerate_id在用户的权限更改(登录、注销、进入网站的管理部分等)时更改用户的会话 ID。
CMS 示例:
更多信息 :
关于该主题的维基百科页面。
其他
- 用户 DoSing :如果您通过禁用尝试过的用户名而不是尝试来自的 IP 来防止登录尝试的暴力破解,那么任何人都可以在 200 万内阻止您的所有用户。生成新密码时也是如此:在用户确认新密码之前不要禁用旧密码(例如通过使用它登录)。
- 使用用户输入在您的文件系统上执行某些操作。过滤这个就像它是癌症和艾滋病一样。这涉及在文件上使用 include 和 require ,该文件的路径部分来自用户输入。
- 使用eval、system、exec或任何来自此类的用户输入。
- 不要将您不希望 Web 访问的文件放在 Web 可访问目录中。
您可以在OWASP页面上阅读很多内容。