Security 在ColdFusion中如何消除跨站点脚本的漏洞
停止为ColdFusion编写跨站点脚本的最佳方法是什么 是否在CF Admin中设置了设置,或者他们的代码是否在Application.cfc中 示例代码:Security 在ColdFusion中如何消除跨站点脚本的漏洞,security,coldfusion,Security,Coldfusion,停止为ColdFusion编写跨站点脚本的最佳方法是什么 是否在CF Admin中设置了设置,或者他们的代码是否在Application.cfc中 示例代码: http://test.com/file.cfm?center=fisCenter')" onmouseover="alert('Insert Hax Here.')" style="display:block;position:absolute;top:0;left:0;width:10000px;height:10000px;z-in
http://test.com/file.cfm?center=fisCenter')" onmouseover="alert('Insert Hax Here.')" style="display:block;position:absolute;top:0;left:0;width:10000px;height:10000px;z-index:100">
这似乎是迄今为止我一直在寻找的答案
<!--- In Application.cfc --->
<cfscript>
this.scriptprotect = "all";
</cfscript>
<!--- In OnRequestStart in Application.cfc --->
<cfscript>
sanitizeScope(url);
</cfscript>
<!--- CF10 Canonicalize --->
<cfscript>
/* This function decodes any particular scope values */
public void function sanitizeScope( struct scope )
{
for( var key in scope )
{
scope[key] = canonicalize(scope[key], false, false);
}
}
</cfscript>
this.scriptprotect=“all”;
消毒作用域(url);
/*此函数用于解码任何特定的范围值*/
public void函数sanitizeScope(结构作用域)
{
for(范围内的var键)
{
scope[key]=规范化(scope[key],false,false);
}
}
第一件事优先:。OWASP拥有大量资源来帮助开发人员更好地理解这个问题。XSS不是CF问题,而是webdev问题
也就是说,您正在使用哪个版本的CF?在CF9或更低版本中更难处理。这些版本的内置功能有限,如果可能的话,可能需要重新使用Java方法。但CF10增加了一系列功能
HTTPOnly Cookies
-虽然在CF10之前很早就“可用”,但CF10将其添加为CF Administrator中的一项设置,或使用Application.cfc中的this.sessioncokie.HTTPOnly=true
。在旧版本中,您仍然可以通过JVM设置或内容头来实现这一点。()
Content security Policy
-()我承认我对CSP没有我应该熟悉的那么熟悉。这不是真正的CF,但它仍然是一些需要了解的东西。它允许您在站点中建立内容的批准来源,这将有助于防止有人注入将用户操作重定向到其他地方的内容。但请注意,它依赖于浏览器
scriptProtect
是CF Admin或Application.cfc设置。()将有助于许多XS,但不是所有XS。它是一种简单的模式匹配黑名单方法,而不是白名单(它几乎只查找对象、嵌入、脚本、小程序和元),因此有很多方法可以绕过它。应使用,但不得依赖或预期100%安全
encodeFor*()
-()。自HTMLEditFormat()时代以来,这些功能已经有了很大的改进。确保使用适当的编码方法
Canonicalize()
-()这个函数很棒,但我相信在10和11之间有一个小的变化,增加了更好的处理。使用附加的CF11 throwOnError标志,当您检查多重编码和混合编码时,如果检测到其中一种,您可以抛出/捕获错误,并记录/阻止该用户。几乎没有理由任何合法用户都会点击这些标志,所以记录/阻止并不是一个坏主意
也可以在中看到戴夫·埃普勒的优秀作品。这将为您提供有关ColdFusion中XSS的一些好信息
最后,正如您从我前面的一些链接中所看到的,Pete Freitag拥有一些我发现的最好的安全资源(),他往往是我信任的有关ColdFusion应用程序安全信息的专家。Pete的BankofUnsecurity应用程序()将为您提供一些关于如何利用CF的好例子
我的故事的寓意是一种基本的纵深防御,即使是针对单一类型的剥削。我上面的一些示例涉及您编写的代码,一些是页面标题(不是完全相同的代码),一些是服务器管理员功能或设置。你永远都不可能100%安全,但最好在恶意用户面前设置多个路障 是的,不要将未初始化的内容作为html插入html。有一种方法专门用于处理html属性和输入,但它们不是唯一发生这种情况的地方。这是由键入它的人输入的URL代码。所以我想知道如何解决这个问题。如果你不把它还给用户。。。没有跨站点脚本风险。我已经使用了这里的前两个strip函数来删除一些顽皮的代码:stripall,但我以前也使用过。不太确定他们会如何使用你的例子。也许你可以选择其中一个函数并修改它来做你需要的事情。考虑使用<代码> GETSuffHTML>>()/Case>函数。请参阅,sanitizeScope()函数将尝试规范化作用域[key],但false、false表示它不会限制多重或混合编码。这将允许函数继续运行而不会失败,但是合法用户几乎没有理由尝试通过任何作用域传递多个或混合编码的值。我想说的是,这很可能是一个恶意用户,应该尽快从应用程序中启动和禁止。您需要清理任何用户输入,因此在任何HTTP POST请求的表单作用域中也运行此操作。如果您在任何屏幕上循环表单或URL范围中的键以在屏幕上输出内容,您也需要清理实际的键名。这是为了满足安全性团队的测试。他们无法在此当前应用上输入此信息。我同意如果有人发布了,那么他们将不得不手动执行。我没有想出考试的办法,只是需要通过考试。