2010-10-06 82 views
9

我新的Web应用程序的安全性。我正在Cakephp开发一个应用程序,我的一个朋友告诉我有关跨站请求伪造(CSRF)和跨站点脚本(XSS)攻击等等,不知道还有多少人在那里。CakePHP的安全

我需要了解如何让CakePHP的捍卫我的web应用程序对这些有所帮助。我们的预算很低,我们现在不能聘请安全顾问。我们仍在开发应用程序并计划在本月底发布。所以想照顾的最初的东西,可以帮助我站在联合国砍死;)

回答

17

没有(也不可能是)一个工具,你可以部署,然后再也不必考虑安全性。通过阻止有效输入,部署像CakePHP的Sanitize::clean这样的“反XSS”黑客攻击会阻止用户访问,同时还不一定会使应用程序更安全。输入过滤黑客最多只是一个混淆的措施,而不是解决安全漏洞的问题。

为了有一个安全的Web应用程序,你必须写一个安全的Web应用程序,从地上爬起来。这意味着,主要是当你将字符串从一个上下文转换到另一个上下文时,注意细节。特别是:

  • 任何时候你写一个字符串,HTML文本内容或属性值,HTML转义它(htmlspecialchars()),以避免HTML注入导致XSS。这不仅仅是可能包含攻击的用户输入问题,它是将纯文本放入HTML的正确方法。

    如果您正在使用HTML辅助方法,他们应该是默认的(除非您关闭escape)照顾这些元素的HTML转义的;非常不幸的是,CakePHP教程包含了在HTML助手之外的文本中将未转义的字符串回送到HTML中的错误做法。

  • 无论何时您使用字符串值创建SQL查询,SQL转义它(为您的数据库提供适当的函数,如mysql_real_escape_string)。

    如果您正在使用CakePHP的ORM,而不是写你自己的SQL,你不必担心这一点。

  • 避免使用用户输入(例如文件上载名称)来命名文件系统上的文件(改为生成干净的唯一ID)或作为system()命令的任何部分。

  • 包括Security组件添加表单提交令牌方案,该方案将阻止CakePHP生成的表单上的XSRF。

+0

感谢安全速成班。使用HTML助手时的一个问题不会 - htmlspecialchars()和mysql_real_escape_string()自动发生? – 2010-10-06 09:26:49

+0

使用HTML助手时,'htmlspecialchars()'默认完成,是的,除非你设置''escape'=> false'。 'mysql_real_escape_string()'不是,因为它是没有任何意义的是SQL转义的HTML输出。在与数据库交谈时需要这样做(并且如果使用ORM,将自动完成)。当你输出没有帮助器的内容时​​,需要'htmlspecialchars()',比如内联的非表单内容。例如。 '

你好,<?php echo htmlspecialchars($ name); ?>!

'。 – bobince 2010-10-06 09:42:48

+3

“非常不幸的是,CakePHP教程包含了在HTML帮助器之外的文本中将未转义的字符串转换为HTML的不良做法”我同意 - 这种方式很多人都没有意识到这非常糟糕。 – mark 2010-10-06 14:07:39