我开始编写php web应用程序(静态php),我做了所有的事情。
但是,我应该如何在我的网络应用程序中检查常见的安全漏洞: SQL注入, XSS , CSRF 等?
答案 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)
我找到了一家公司,但我还没有尝试过: http://lp.checkmarx.com/php-code-security
以下是一些提示: http://code.tutsplus.com/tutorials/5-helpful-tips-for-creating-secure-php-applications--net-2260
答案 3 :(得分:0)
如果有用户身份验证,则应检查当前登录用户是否无法访问与其无关的任何其他数据。意味着当前用户从客户表中有3个条目,那么他应该只能访问这3个条目。
如果您正在使用框架,那么他们已经实现了许多安全功能。例如,在Zend Framework中,Form Elements可以在表单中添加csrf。因此,应在提交的时间内提交表格并自动在后端验证csrf密钥。
大多数框架都提供了htmlescapers。因此,通过使用它可以避免xss处于某种良好的水平。对于静态/核心PHP代码,您应该使用htmlentities来避免额外的不需要的字符。