首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我能在CF11中得到强大的XSS保护吗?我可以在不触及每个查询或输入的情况下应用于整个站点吗?

我能在CF11中得到强大的XSS保护吗?我可以在不触及每个查询或输入的情况下应用于整个站点吗?
EN

Stack Overflow用户
提问于 2014-09-25 02:10:17
回答 3查看 621关注 0票数 4

因此,我目前正在使用CF11和CFWheels 1.1,“全局脚本保护”()服务器功能在涵盖XSS基础方面做得很糟糕。我想将其扩展到阻止JS的任何和所有标记/向量插入到数据库中。

CF11通过getSafeHTML()函数提供antiSamy保护,该函数应用application.cfc中指定的xml文件,但我仍然需要修改应用程序中的每个varchar才能使用它,对吗?

是否有一种方法可以使CF11以类似于GSP特性的方式启用反that特性服务器或应用程序?我的意思是,GSP自动从提交给应用程序的输入中删除标记,而不必修改所有查询/表单操作。我希望有一种方法来以同样的方式应用antisamy策略文件或getSafeHTML()。

谢谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-09-25 10:33:00

你为什么要把它应用到每个人身上?您只需要在字符串(varchar)输入和插入时这样做。即使如此,你也不会到处使用它。例如,如果你问我的名字和简历,你没有理由要html,甚至“好”html,在我的名字。因此,我确信您已经使用了一些东西来转义所有html或简单地删除它。只有在像生物这样的领域,你才会使用getSafeHTML。

验证就是工作。你(通常)不想要一个“一次性”的解决方案。咬紧牙关就行。

如果您确实想这样做,可以使用onRequestStart自动处理表单和url作用域中的所有键。这是由内存编写的,因此它可能有排字,但下面是一个示例:

代码语言:javascript
复制
function onRequestStart(string req) {
    for(var key in form) { form[key] = getSafeHTML(form[key]); }
    for(var key in url) { url[key] = getSafeHTML(url[key]); }
}
票数 8
EN

Stack Overflow用户

发布于 2014-09-25 12:17:01

我同意Ray的观点,验证是工作,也是非常重要的工作。如果您可以有一个服务器范围的设置,这将是通用的方式,以适应所有情况。当您对特定字段进行自己的验证时,您确实可以缩小攻击面。例如,假设您有一个包含三个字段的表单:姓名、信用卡号码、社会保险号码。对于一个服务器范围的设置,它需要足够通用,允许所有三种类型的输入。通过您自己的验证,您可以对每个字段非常具体,并且只允许特定的一组字符;name -只允许alpha字符和空格,信用卡号码-只允许数字、空格、破折号,并且必须符合mod规则,社会保障号码-只允许数字和破折号3-2-4格式。其他的都不允许。

尽管如此,我只想指出,“全球脚本保护”规则可以定制。该设置通过将服务器配置中的cf_root/lib/neo-security.xml文件中定义的正则表达式或JEE配置中的cf_root/WEB-INF/cfusion/lib/neo-security.xml文件中定义的正则表达式应用到变量值中来工作。您可以通过修改ColdFusion变量中的正则表达式来自定义CrossSiteScriptPatterns替换的模式。

默认正则表达式定义为:

代码语言:javascript
复制
<var name='CrossSiteScriptPatterns'>
    <struct type='coldfusion.server.ConfigMap'>
        <var name='&lt;\s*(object|embed|script|applet|meta)'>
            <string>&lt;InvalidTag</string>
        </var>
    </struct>
</var>

这意味着,默认情况下,全局脚本保护机制只查找包含<object<embed<script<applet<meta的字符串,并将其替换为<InvalidTag。如果需要,可以增强该正则表达式以查找更多的情况。

请参阅保护变量不受本页跨站点脚本攻击部分的影响。

票数 2
EN

Stack Overflow用户

发布于 2014-09-25 21:44:59

该解决方案是为cf轮1.1应用程序实现的:

我使用了https://code.google.com/p/owaspantisamy/downloads/list中的slashdot文件

这在application.cfc中是这样的:

代码语言:javascript
复制
<cfcomponent output="false">
    <cfset this.security.antisamypolicy="antisamy-slashdot-1.4.4.xml">      
    <cfinclude template="wheels/functions.cfm">     
</cfcomponent>

这会出现在/ProjectRoot/events/onrequeststart.cfm文件中。

代码语言:javascript
复制
    function xssProtection(){
var CFversion = ListToArray(SERVER.ColdFusion.productversion);
if(CFversion[1]GTE 11){
    for(var key in form) {
        if(not IsJSON(form[key])){
            form[key] = getSafeHTML(form[key]);
        }
    }
    for(var key in url) {
        if(not IsJSON(url[key])){
            url[key] = getSafeHTML(url[key]);
        }
    }
}

} xssProtection();

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26029383

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档