Ajax 是否应该限制URL字符串的长度以提高安全性?

Ajax 是否应该限制URL字符串的长度以提高安全性?,ajax,coldfusion,coldfusion-8,cfc,cfajaxproxy,Ajax,Coldfusion,Coldfusion 8,Cfc,Cfajaxproxy,我正在使用ColdFusion 8和jQuery 1.7.2 我正在使用CFAJAXPROXY将数据传递给CFC。这样做会创建一个JSON数组(参数集合)并通过URL传递它。字符串可能很长,因为传递了相当多的数据 我正在工作的站点有一个现有代码,该代码将任何URL查询字符串的长度限制为250个字符。这是在application.cfm文件中通过测试查询字符串的长度来完成的。如果任何查询字符串大于250个字符,则请求将中止。这样做的目的是确保黑客或其他恶意代码不会通过URL字符串传递 现在我们使用

我正在使用ColdFusion 8和jQuery 1.7.2

我正在使用CFAJAXPROXY将数据传递给CFC。这样做会创建一个JSON数组(参数集合)并通过URL传递它。字符串可能很长,因为传递了相当多的数据

我正在工作的站点有一个现有代码,该代码将任何URL查询字符串的长度限制为250个字符。这是在application.cfm文件中通过测试查询字符串的长度来完成的。如果任何查询字符串大于250个字符,则请求将中止。这样做的目的是确保黑客或其他恶意代码不会通过URL字符串传递

现在我们使用查询字符串在URL中传递JSON数组,我们发现Ajax请求被频繁中止

我们还有许多其他安全实践,例如从代码中剥离任何“”标记并使用CFQUERYPARAM


我的问题是,为了安全起见限制URL字符串的长度是个好主意还是根本无效?

我不是ColdFusion开发人员。但我认为其他语言也是如此

我觉得这有点帮助。恶意代码或sql注入问题应由应用程序处理

我同意,有限长度的查询字符串值更安全,并且增加了黑客的难度。但是你不能用POST数据来做这件事。它限制了一些功能。例如
对于一个utf-8字符,编码后可能需要9个字符。这意味着您只能输入27个非英语字符。

URI长度和安全性之间绝对没有相关性,而更多的是一个问题:

  • 将您提供给用户代理的信息量限制为“需要了解的基础”。这包括您运行的应用程序服务器类型和相关约定、您运行的web服务器和相关约定以及主机上的操作系统。这些基本上都是可以被视为漏洞的东西
  • 减少利用这些漏洞的影响,即引入补丁、确保正确配置等

  • 如上所述,在web层,这不仅包括GET(您关心的问题),而且还包括HTTP资源上几乎任何其他操作的POST、PUT、DELETE。

    将其移动到Evik的答案中-

    如果输入被适当地消毒,这看起来(充其量)完全没有必要。我相信聪明的人可以很快击败“小门口安全”防御,假设这是唯一的防御

    OWASP对web安全有一些好的、合理的指导方针。据我所知,限制url的大小不在列表中。有关详细信息,请参阅:


    我还想回应Hereblur的评论,即这使得国际化变得棘手,或者可能不可能。

    限制国际化的唯一原因与性能和DOS攻击有关,而不是安全本身(尽管DOS是一种安全威胁,它会关闭服务器)。Web服务器和应用程序服务器(包括CF)允许您限制POST数据的大小,这样您的服务器就不会因上传非常大的文件而降级。当服务器在解析、处理、写入或其他方面遇到困难时,URL数据(如果大量)可能会导致长时间运行的请求


    因此,与这些事情相关的风险不大。早在新台币时代,IIS3就有许多缺陷,这些缺陷通过限制URL的长度被“锁定”——但那些日子早已过去了。在仔细研究这个问题之前,我会先看更多代表低垂果实的漏洞——当然,除非你觉得你在与别人探讨你的具体问题(我的意思是:长URL)。

    @dgabriel,如果这是你的答案,请将其作为答案而不是评论。如果结果是最好的答案,我想选择它。你最后一个问题的答案是“无效”的。你不能用POST而不是GET,因此数据不在URL中,因此删除URL长度作为考虑因素?@AdamCameron,好问题。也许你能帮我回答这个问题。我不知道是否可以在CFAJAXPROXY中指定post/get,但我会检查。谢谢你的提示。我从来没有使用过Evik,但是我看过文档(),在CF为你创建的JS代理对象上有一个setHTTPMethod()方法。我想这应该能奏效吧?