我应该如何检查常见的安全漏洞在我的php应用程序


How should I check for common security vulnerabilities in my php app?

我开始写php web应用程序(静态php),我做了所有的东西。

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

首先,自动漏洞扫描器无法提供保证。所以你不能相信他们的结果。我将简短地解释为了保护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的关键。你应该使用编码方法之前,echo/print变量到浏览器!跨站攻击有三种类型。第一个是反射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输入。然后您将为每个表单请求检查该值。如果不相同,则表示客户端不是故意发送请求的。

6。失效认证和会话管理

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

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

PS:我不能发布超过2个链接,因为声誉点。不好意思

可以使用Arachni Scanner。它是一个开源工具,具有web和amp;cli接口。

我找到了一家公司,但我还没有尝试过:http://lp.checkmarx.com/php-code-security

这里有一些提示:http://code.tutsplus.com/tutorials/5 -帮助-建议- -创造-安全- php应用程序-网- 2260

  • 如果有用户认证,那么你应该检查,当前登录的用户不能访问任何其他与他无关的数据。

  • 表示当前用户从客户表中有3个条目,那么他应该只能访问这3个条目。
  • 如果你正在使用框架,那么他们已经实现了许多安全功能。例如,在Zend框架中,表单元素能够在表单中添加csrf。因此,在给定的时间内,表单应提交,csrf密钥将在后端自动验证。

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