Yos*_*sef 10 php xss phpunit automated-tests sql-injection
应该如何用phpunit php web应用程序测试xss + sql注入?我想找到输出xss +其他攻击的程序来测试我的应用程序表单.应该使用新的xss和其他新攻击随时更新此程序/服务.是否存在此类服务/程序,如果不是今天如何完成?如果可以,请举一些例子.
(我使用php 5.3 + zend framework + mysql)
编辑:
我询问测试!而不是阻止我也知道的技术.
谢谢,
优素福
我不认为你可以轻松地做这种事情的单元测试.这将要求您的应用程序以有助于模拟其组件的方式编写,并且肯定涉及大量连续手动工作(确保测试和模拟所有内容,测试无数种类的攻击等).
唯一可以肯定的是,如果你能得到一些广泛的自动化工具,它总是是最新的,那么无论谁给你的费用都不够.
防止此类攻击的形式是众所周知且易于使用的:
htmlspecialchars任何进入HTML的变量(请注意,有许多格式,如BBCode,MarkDown,Textile等,其唯一目的是允许一个有用的格式化选项子集,而无需打开Pandora的盒子)因此,我要说,确保遵循这些做法/使用这些工具,您的时间更有价值.
此外,如果您通过应用程序的明确定义的部分(无论什么都逃避所有输入的数据库访问方法)漏斗对这两个子系统(sql和HTML输出)的所有访问权限; HTML输出函数以相同的方式转义输入变量和将它们注入到随后回显的"HTML模板"中,然后对这些子系统进行单元测试变得容易.体面的PHP框架已经做到了这一点.
此时,引入漏洞的唯一真正机会是绕过或滥用这些子系统.在我看来,你最好花费精力来指定和遵循良好的编码实践,编写单元测试来防止业务逻辑中的漏洞(对你的清理代码进行单元测试当然是另一回事).
最后,您可以使用自动 SQL 注入 工具和XSS相关 工具来探测Web应用程序.但除非有人雇用你进行渗透测试,否则最好使用这些,因为你会在性爱中使用保护:使用它,但不要指望它.
我不会为XSS或SQL注入检测编写单元测试.我会做的是:
要防止XSS,请使用以下方法之一转义所有用户输出:
要防止SQL注入,请为所有内容使用PDO和占位符.即)
"SELECT * FROM users WHERE uid = $_POST['id']";
Run Code Online (Sandbox Code Playgroud)
变
"SELECT * FROM users WHERE uid = ?";
Run Code Online (Sandbox Code Playgroud)
要么
"SELECT * FROM users WHERE uid = :id";
Run Code Online (Sandbox Code Playgroud)
编辑
您可能还想尝试一些浏览器插件,例如:
https://addons.mozilla.org/en-US/firefox/addon/hackbar/
https://addons.mozilla.org/en-US/firefox/addon/xss-me/
https://addons.mozilla.org/en-US/firefox/addon/sql-inject-me/
https://addons.mozilla.org/en-US/firefox/addon/access-me /
SQL注入是那些只能通过审核代码才能真正找到的问题类别之一.您应该寻找动态构建查询的地方而不是使用预准备语句 - 这些是您的SQL注入向量.将这些更改为准备好的语句,并消除SQL注入的风险.
单元测试将帮助您解决逻辑错误,但无法帮助您找到诸如此类的安全问题.唯一的解决方案是警惕和代码审查/审核.
更新:我差点忘了!您应该查看PHP_CodeSniffer,以便对代码进行自动审核.它应该可以帮助您至少检测一些人在代码中执行潜在危险和不安全操作的实例,并且您可以扩展它以检测比默认情况下基本安装更多的问题.