Security Cakephp安全性

Security Cakephp安全性,security,cakephp,xss,csrf,xsl-fo,Security,Cakephp,Xss,Csrf,Xsl Fo,我对网络应用的安全性还不熟悉。我正在用Cakephp开发一个应用程序,我的一个朋友告诉我关于跨站点请求伪造(CSRF)和跨站点脚本(XSS)攻击等。不知道还有多少 我需要一些帮助来理解如何让Cakephp保护我的web应用程序免受这些攻击。我们的预算很低,目前还不能聘请安全顾问。我们仍在开发该应用程序,并计划在本月底发布。所以,我想处理一些可以帮助我不受黑客攻击的初始内容;) 没有(也不可能有)一种工具可以部署,然后再也不用考虑安全问题。部署像CakePHP的Sanitize::clean这样的

我对网络应用的安全性还不熟悉。我正在用Cakephp开发一个应用程序,我的一个朋友告诉我关于跨站点请求伪造(CSRF)和跨站点脚本(XSS)攻击等。不知道还有多少

我需要一些帮助来理解如何让Cakephp保护我的web应用程序免受这些攻击。我们的预算很低,目前还不能聘请安全顾问。我们仍在开发该应用程序,并计划在本月底发布。所以,我想处理一些可以帮助我不受黑客攻击的初始内容;)

没有(也不可能有)一种工具可以部署,然后再也不用考虑安全问题。部署像CakePHP的
Sanitize::clean
这样的“反XSS”黑客会阻止用户的有效输入,同时也不一定会使应用程序安全。输入过滤黑客充其量只是一种混淆措施,而不是修复安全漏洞

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

  • 每当您向HTML文本内容或属性值写入字符串时,HTML都会对其进行转义(
    htmlspecialchars()
    ),以避免HTML注入导致XSS。这不仅仅是用户输入可能包含攻击的问题,而是将纯文本放入HTML的正确方法


    在使用HTML助手方法时,默认情况下,它们应该负责这些元素的HTML转义(除非关闭
    escape
    );非常不幸的是,CakePHP教程中包含了一个糟糕的做法,即在HTML帮助程序之外将未转义的字符串回显到HTML中以获取文本

  • 无论何时创建带有字符串值的SQL查询,SQL都会对其进行转义(使用适用于数据库的适当函数,例如
    mysql\u real\u escape\u string

    如果您使用的是CakePHP的ORM,而不是编写自己的SQL,那么您不必担心这一点

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

  • 包含组件以添加表单提交令牌方案,该方案将阻止对CakePHP生成的表单使用XSRF


保护Cake相对容易(与自编php脚本相比):

感谢您为我们提供了一个关于安全性的速成班。在使用HTML帮助程序时,有一个问题不是自动发生的-htmlspecialchars()和mysql\u real\u escape\u string()?在使用HTML帮助程序时,
htmlspecialchars()
默认完成,是的,除非您将
'escape'=>设置为false
mysql\u real\u escape\u string()
不是,因为作为SQL转义HTML输出没有任何意义。这需要在与数据库对话时发生(如果您使用的是ORM,则会自动完成)<当您在没有助手的情况下输出内容(例如内联非表单内容)时,需要code>htmlspecialchars()。你好

“非常不幸的是,CakePHP教程中包含了将未转义字符串回显到HTML中以供HTML帮助程序之外的文本使用的错误做法”我同意-这种方式很多人都没有意识到这真的很糟糕。@Sela:数据库层是进行HTML转义的错误位置。您不能假设所有数据都将采用以下路径:输入=>database=>HTML输出;完全可以从表单或其他来源获取输入并将其直接回显到页面(在这种情况下,您错过了转义),或者将数据用于非HTML目的(在这种情况下,您有不必要的转义),或者从数据库中获取内容,对其进行更改,然后将其写回数据库(在这种情况下,您有双重转义和可怕的
爆炸)。在HTML输出时包装是正确的。(在任何情况下,您都不希望数据库中有HTML转义内容。它不会正确搜索、整理或切片。)