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

时间:2014-03-29 10:05:21

标签: php xss csrf

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

但是,我应该如何在我的网络应用程序中检查常见的安全漏洞: SQL注入 XSS CSRF 等?

4 个答案:

答案 0 :(得分:2)

首先,自动漏洞扫描程序无法提供保证。所以你不能相信他们的结果。我将简要解释为了保护您的PHP应用程序,您必须做些什么。

<强> 1。使用PDO而不是Native MySQL Library。

为了保护您的应用程序再次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漏洞。第一个是Reflected XSS,第二个是Stored 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对象注入漏洞

简短说明,不要使用序列化()功能。使用 json_encode 代替。如果你看看以下链接。您可以清楚地了解什么是Object Injection漏洞。 https:// www.owasp.org/index.php/PHP_Object_Injection

<强> 5。 CSRF

跨站点请求伪造也可能是危险的。基本上你必须确定“这个请求是否是由用户故意发送的?”为了确保这一点,您必须生成唯一键并将其存储在每个用户的会话中,并且您必须将其用作html标记内的隐藏html输入。您将检查每个表单请求的值。 “与存储相同吗?”如果没有,请求不是由客户故意发送的。

<强> 6。身份验证和会话管理中断

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

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

PS:由于声誉点,我无法发布2个以上的链接。对不起。

答案 1 :(得分:1)

您可以使用Arachni Scanner。它是一个既有网络也有网络的开源工具。 cli接口。

答案 2 :(得分:0)

答案 3 :(得分:0)

  • 如果有用户身份验证,则应检查当前登录用户是否无法访问与其无关的任何其他数据。意味着当前用户从客户表中有3个条目,那么他应该只能访问这3个条目。

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

  • 大多数框架都提供了htmlescapers。因此,通过使用它可以避免xss处于某种良好的水平。对于静态/核心PHP代码,您应该使用htmlentities来避免额外的不需要的字符。

相关问题