Cakephp 安全性
Posted
技术标签:
【中文标题】Cakephp 安全性【英文标题】:Cakephp Security 【发布时间】:2011-04-21 16:33:06 【问题描述】:我是网络应用安全的新手。我正在使用 Cakephp 开发一个应用程序,我的一个朋友告诉我有关跨站点请求伪造 (CSRF) 和跨站点脚本 (XSS) 攻击等。不知道还有多少。
我需要一些帮助来了解如何让 Cakephp 保护我的 Web 应用程序免受这些攻击。我们的预算很低,目前我们还不能聘请安全顾问。我们仍在开发该应用程序,并计划在月底前发布。所以想要处理可以帮助我不受黑客攻击的最初的东西;)
【问题讨论】:
【参考方案1】:没有(也不可能)一种工具可以部署,然后再也不必考虑安全性。部署像 CakePHP 的 Sanitize::clean
这样的“反 XSS”黑客将通过阻止有效输入来妨碍用户,但仍不一定会使应用程序安全。输入过滤黑客充其量只是一种混淆措施,而不是解决安全漏洞的方法。
要拥有一个安全的 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() 自动发生? 当使用 HTML 助手时,htmlspecialchars()
是默认完成的,是的,除非你设置了'escape'=>false
。 mysql_real_escape_string()
不是,因为作为 SQL 转义 HTML 输出没有任何意义。这需要在与数据库交谈时发生(如果您使用 ORM,它将自动完成)。 htmlspecialchars()
在没有帮助器的情况下输出内容时需要htmlspecialchars()
,例如内联非表单内容。例如。 <p>Hello, <?php echo htmlspecialchars($name); ?>!</p>
.
“很不幸的是,CakePHP 教程包含了将未转义的字符串回显到 HTML 中用于 HTML 助手之外的文本的不良做法”我同意 - 许多人不知道这真的很糟糕。
@Sela:数据库层是进行 HTML 转义的错误位置。您不能假设所有数据都将采用路径 form-input=>database=>HTML-output;完全可以从表单或其他来源获取输入并将其直接回显到页面(在这种情况下您错过了转义),或者将数据用于非 HTML 目的(在这种情况下您有不必要的转义),或者采取数据库中的内容,对其进行更改,然后将其写回数据库(在这种情况下,您会出现双重转义和可怕的&amp;amp;amp;amp;amp;amp;amp;
爆炸)。在 HTML 输出时换行是正确的。
(在任何情况下,您都不希望数据库中有 HTML 转义的内容。它不会正确搜索、整理或切片。)【参考方案2】:
Cake 的安全性相对容易(与自己编写的 php 脚本相比): http://www.dereuromark.de/2010/10/05/cakephp-security/
【讨论】:
以上是关于Cakephp 安全性的主要内容,如果未能解决你的问题,请参考以下文章
CakePHP 3.0 ORM - 调试工作,翻转直播,抛出错误
markdown [cakephp:CakePHP3注意事项] CakePHP3基本知识说明。 #cakephp
php [cakephp:Paginator示例] CakePHP上PaginatorComponent的示例代码。 #cakephp
php [cakephp:mysqldump] mysqldumpのcakephp実装サンプル。#php #cakephp #mysql