【问题标题】:How should I check for common security vulnerabilities in my php app? [closed]我应该如何检查我的 php 应用程序中的常见安全漏洞? [关闭]
【发布时间】:2014-03-30 03:59:48
【问题描述】:

我开始写php web应用程序(静态php),我做了每一件事。

但是,我应该如何检查我的 Web 应用程序中的常见安全漏洞:SQL 注入XSSCSRF 等?

【问题讨论】:

  • 如果容易“检查”,就不会有易受攻击的网站。
  • 你最好的“检查”是添加安全措施,希望它会没事。
  • OWASP Testing Guide你可能想学习。
  • 什么是“静态 PHP”?

标签: php xss csrf


【解决方案1】:

首先,自动漏洞扫描器不能给出保证。所以你不能相信他们的结果。我将很快解释您必须做什么来保护您的 PHP 应用程序。

1.使用 PDO 代替原生 MySQL 库。

为了保护您的应用程序免受 SQL 注入漏洞的侵害,这是最严重的 Web 应用程序漏洞之一,您必须使用 PDO。例如,

不要这样做。

<?php
$cal = $_GET["calories"];
mysql_query('SELECT name, colour, calories
    FROM fruit
    WHERE calories < '.$cal);
?>

这样做。

<?php
$calories = $_GET['calcalories'];
$sth = $dbh->prepare('SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories');
$sth->bindParam(':calories', $calories, PDO::PARAM_INT);
$sth->execute();
?>

2。对您将在客户端浏览器上打印的每个变量进行编码 这是预防XSS的关键。您应该在向浏览器回显/打印变量之前使用编码方法!有 3 种 XSS 漏洞。第一个是反射型 XSS,第二个是存储型 XSS,最后一个是基于 Dom 的 XSS。请阅读以下链接以了解什么是 XSS 以及如何保护您的应用程序免受 XSS 漏洞的影响。 https://www.owasp.org/index.php/Cross-site_Scripting_(XSS) .尝试解释其中三个将需要两三页!所以我会跳过这部分。

3。不安全的直接对象引用

取决于 Web 应用程序,此漏洞可能是最危险的一个。因为这与 PHP 或代码语法无关。此漏洞的出现是因为应用程序设计失败和代码解剖。例如;

www.gsmfirm.com/invoice/1337 -> It's your invoice for January!
www.gsmfirm.com/invoice/1338 -> It belongs to someone else!

请阅读以下链接。我相信你会明白什么是 IDOR 以及它会导致什么。 http://avsecurity.in/2013/06/nokia-insecure-direct-object-reference/

4. PHP 对象注入漏洞

简短说明,不要使用 serialize() 函数。使用 json_encode 代替。如果您将查看以下链接。您可以清楚地了解什么是对象注入漏洞。 https://www.owasp.org/index.php/PHP_Object_Injection

5. CSRF

跨站请求伪造也很危险。基本上你必须确定“这个请求是用户故意发送的吗?”为了确保这一点,您必须为每个用户生成唯一密钥并将其存储在会话中,并且您必须将其用作 html 标签内的隐藏 html 输入。然后您将为每个表单请求检查该值。 “和stored一样吗?”如果不是,则说明请求不是客户端故意发送的。

6.身份验证和会话管理损坏

基本上,有两种类型的漏洞。 会话固定会话预测。 为了防止 Session Fixation,您必须在成功登录后重新生成会话密钥。此外,您必须使用 HTTP Header Cookie 参数来携带会话密钥,而不是 GET 参数。

会话预测是会话密钥生成算法的弱点。使用复杂的密钥生成方法来生成不可预知的密钥。请不要尝试开发自己的生成或加密算法。

PS:由于声誉点,我不能发布超过 2 个链接。对此感到抱歉。

【讨论】:

    【解决方案2】:

    您可以使用Arachni Scanner。它是一个同时具有 web 和 cli 界面的开源工具。

    【讨论】:

      【解决方案3】:

      【讨论】:

        【解决方案4】:
        • 如果有用户身份验证,那么您应该检查,当前登录的用户无法访问与他无关的任何其他数据。意味着当前用户有 3 个来自客户表的条目,那么他应该只能访问这 3 个条目。

        • 如果您使用的是框架,那么他们已经实现了许多安全功能。例如在 Zend Framework Form Elements 中可以在表单中添加 csrf。因此,在给定的时间内应该提交表单,并且 csrf 密钥将在后端自动验证。

        • 大多数框架都提供 htmlescapers。因此,通过使用它,您可以在一定程度上避免 xss。对于静态/核心 php 代码,您应该使用 htmlentities 来避免多余的不需要的字符。

        【讨论】:

          猜你喜欢
          • 2010-09-06
          • 2013-02-11
          • 2012-07-05
          • 1970-01-01
          • 1970-01-01
          • 2011-10-19
          • 2011-09-08
          • 2018-12-09
          • 1970-01-01
          相关资源
          最近更新 更多