Cakephp安全性

9

我对Web应用程序的安全性还不太了解。我正在使用Cakephp开发一个应用程序,我的一个朋友告诉我有关跨站请求伪造(CSRF)和跨站脚本攻击(XSS)等攻击方式,但我不确定是否还有其他攻击方式。

我需要一些帮助来理解如何让Cakephp保护我的Web应用程序免受这些攻击。我们的预算有限,目前无法聘请安全顾问。我们仍在开发应用程序,并计划在月底发布。因此,我想先处理一些能够帮助我避免被黑客攻击的初始问题;)

2个回答

17

没有一种工具可以部署后从此不再考虑安全。部署 “反 XSS” 技巧,例如 CakePHP 的 Sanitize::clean 将阻碍用户有效输入,但仍不能保证应用程序的安全。输入过滤技巧充其量只是混淆措施,而不是修复安全漏洞的措施。

要拥有安全的 Web 应用程序,您必须从头开始编写安全的 Web 应用程序。这意味着,首先注意将一个上下文中的字符串放入另一个上下文中时的细节。特别是:

  • 每次将字符串写入 HTML 文本内容或属性值时,请使用 HTML 转义(htmlspecialchars())以避免 HTML 注入导致 XSS。这不仅涉及可能包含攻击的用户输入问题,更是将纯文本放入 HTML 的正确方法。

    如果您正在使用 HTML 辅助方法,则它们应默认处理那些元素的 HTML 转义(除非您关闭了 escape);非常遗憾的是,CakePHP 教程包括将未转义的字符串输出到 HTML 中,其中的文本位于 HTML 助手之外,这是一个不好的做法。

  • 每次使用字符串值创建 SQL 查询时,请使用 SQL 转义(使用适用于您的数据库的适当函数,例如 mysql_real_escape_string)。

    如果您正在使用 CakePHP 的 ORM 而不是编写自己的 SQL,则无需担心此问题。

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

  • 包含 Security 组件,以添加表单提交令牌方案,从而防止 CakePHP 生成的表单上发生 XSRF。


感谢提供安全方面的速成课程。有一个问题,当使用HTML Helpers时,htmlspecialchars()和mysql_real_escape_string()是否会自动发生? - Harsha M V
当使用HTML助手时,默认情况下会执行htmlspecialchars(),除非您设置了“'escape'=>false”。“mysql_real_escape_string()”则不会,因为SQL转义HTML输出没有任何意义。这需要在与数据库交互时发生(如果您正在使用ORM,则将自动执行)。当您输出无助手的内容时,例如内联非表单内容时,需要使用htmlspecialchars()。例如:<p>Hello, <?php echo htmlspecialchars($name); ?>!</p> - bobince
3
很不幸,CakePHP教程中存在一种不好的做法,即在HTML助手以外的文本中使用未转义的字符串进行输出。我同意 - 这样很多人并不知道这是真的很糟糕的做法。 - mark
有没有一种方法可以在存储到数据库之前执行它?因为现在我使用h()来包装echo调用。 - Sela Yair
1
@Sela:在数据库层进行HTML转义是错误的。您不能假设所有数据都会遵循表单输入=>数据库=>HTML输出的路线;完全有可能直接从表单或其他来源获取输入并将其直接输出到页面(此时您错过了转义),或者将数据用于非HTML目的(此时仍逃不过无谓的转义),或者从数据库中提取内容,对其进行更改,然后将其写回数据库(这种情况下您就会双重转义,产生可怕的"&amp;amp;amp;amp;amp;amp;"大爆炸)。在HTML输出时进行包装才是正确的做法。 - bobince
1
无论如何,您都不希望在数据库中使用HTML转义内容。它无法正确搜索、整理或切片。 - bobince

4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接