4

有哪些方法可以检测 PHP/MySQL Web 应用程序中的漏洞(检查 GET、POST、COOKIE 数组中的某些字符或代码片段/使用带有数据库的库,该数据库包含常见漏洞的所有模式(如果存在)? ),当检测到一个时我应该如何处理?

例如,如果有人尝试使用 GET 请求方法在我的 PHP/MySQL Web 应用程序中查找 SQL 注入,我是否应该将用户执行的操作存储在数据库中,让应用程序给我发送电子邮件,IP 禁止用户并向他/她显示一条消息“抱歉,我们从您的帐户中检测到有害行为,我们将对其进行审查。您的帐户已被禁用,并且您的 IP 地址可能会禁用某些功能。如果这是一个错误,请- 将所有详细信息发送给我们。”

谢谢。

4

5 回答 5

2

想到三件事:

  1. 防御性编码,清理所有输入,准备 sql 语句并使用Suhosin
  2. 通过使用漏洞扫描程序侵入站点来提高站点的安全性
  3. 使用入侵检测系统记录黑客攻击尝试

如果您觉得完整的 IDS 太多了,请尝试PHP IDS,因为它几乎可以满足您开箱即用的要求。请注意,虽然无法阻止攻击,但在 PHP 级别检测入侵可能已经为时已晚。

如果入侵成功,我想你最好的办法是让服务器离线,看看造成了什么损害。如果您需要收集合法可用的证据,您可能不得不考虑聘请某人对机器进行取证分析。

如果您觉得需要对不成功的入侵尝试做出反应并获得恶意用户的 IP,请找出 ISP 并尽可能详细地告知他入侵尝试的详细信息。大多数 ISP 都有针对这些情况的滥用联系人。

于 2010-02-08T22:03:04.507 回答
1

只需在所有 $_REQUEST 和 $_COOKIE 变量上使用 strip_tags() 来处理这些变量中显示的代码,至于 SQL,您可能必须编写类似查询的正则表达式或其他东西,但这不应该是您的问题应该始终 mysql_real_escape_string($str) 查询中的所有变量。尝试这样的事情。

function look_for_code_and_mail_admin($str) {
    $allowed_tags = "<a>,<br>,<p>";
    if($str != strip_tags($str, $allowed_tags)) {
        $send_email_to = "some@bodys.email";
        $subject = "some subject";
        $body = "email body";
        mail($send_email_to,$subject,$body);   
    }
    return($str);
}
于 2010-02-08T21:48:25.027 回答
1

你的问题是双重的,我将回答第二部分。

记录所有内容,但不要禁止或显示任何消息。如果出现误报,那会很尴尬。作为一般规则,尝试构建一个可以毫无问题地处理任何类型的用户输入的应用程序。

于 2010-02-08T21:49:01.893 回答
0

嗯,我不记得我上次看到一个试图记录我无法渗透的 SQL 注入攻击的站点是什么时候了。

您不必担心有人在攻击该站点的天气,因为天气是否是攻击,充其量只是主观的。如果站点 base64 对某些值进行编码并在使用之前对其进行解码怎么办?您的 IDS无法捕捉到这一点。如果用户想要发布一段代码,因为它包含 SQL,它会被检测为漏洞利用怎么办?这太浪费时间了...如果您真的需要知道是否有人在攻击您,只需在单独的机器上安装一些 IDS,对传入流量具有只读访问权限。我说单独的机器,因为许多 IDS 本身很容易受到攻击,只会让情况变得更糟。

使用标准的安全编程方法,使用参数化的 SQL 查询或 ORM。

于 2010-04-22T18:28:06.273 回答
-1

对我来说,电子邮件位和一切似乎都做得太多了。除此之外,我喜欢在我常用的网站上跑来跑去,并尝试找到可注射的点,这样我就可以警告管理员了。你会为此IP禁止我吗?

我建议自己寻找可利用的部分并在必要时进行消毒。Acunetix 有一个非常好的程序。如果您不想为 Acunetix 付出高昂的代价,那么您可能想要研究一些非常好的名为 XSS Me 和 SQL Inject me 的 firefox 插件。

于 2010-02-08T21:50:02.060 回答