我对Web应用程序的安全性还不太了解。我正在使用Cakephp开发一个应用程序,我的一个朋友告诉我有关跨站请求伪造(CSRF)和跨站脚本攻击(XSS)等攻击方式,但我不确定是否还有其他攻击方式。
我需要一些帮助来理解如何让Cakephp保护我的Web应用程序免受这些攻击。我们的预算有限,目前无法聘请安全顾问。我们仍在开发应用程序,并计划在月底发布。因此,我想先处理一些能够帮助我避免被黑客攻击的初始问题;)
没有一种工具可以部署后从此不再考虑安全。部署 “反 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。
htmlspecialchars()
,除非您设置了“'escape'=>false”。“mysql_real_escape_string()”则不会,因为SQL转义HTML输出没有任何意义。这需要在与数据库交互时发生(如果您正在使用ORM,则将自动执行)。当您输出无助手的内容时,例如内联非表单内容时,需要使用htmlspecialchars()
。例如:<p>Hello, <?php echo htmlspecialchars($name); ?>!</p>
。 - bobince