在application.cfm中使用urlencode来检测url ColdFusion中的XSS



我继承了一些遗留的ColdFusion代码,大约一年前,我的网站受到XSS和SQL注入的影响。

这使我能够验证输入,并在application.cfm文件中包含ScriptProtect="all"的设置。我对它进行了扫描,结果很干净。

最近我再次扫描了它,它发现了许多漏洞,特别是在url中嵌入了一个脚本。

例如,它被附加到一个url:

?’A<style > a(font0family:expression(alert(2424)))</style>

它嵌入了一个隐藏的JavaScript。如何在application.cfm文件中使用ColdFusion函数(如URLencode())来检测/防止此类XSS攻击?

根据攻击的性质和应用程序的类型,您可以做一些特定的事情。以下是我认为的"三巨头"。第一项是在Coldfusion管理员的"设置"区域中启用"启用全局脚本保护"。

第二个,这对于SQL注入非常重要,是使用<cfqueryparam>对查询中使用的任何变量进行严格的键入。例如:

<cfqueryparam cfsqltype="cf_sql_integer" value="#my_integer#">

在基于脚本的查询中,这将通过以下方式实现:

<cfscript>
qget = new query(datasource=my_datasource);
qget.addParam(name='my_integer',value=url.my_id,cfsqltype='cf_sql_integer');        
qresult = qget.execute(sql='
SELECT * from my_table
WHERE id = :my_integer
').getResult();
</cfscript>

第三,取决于您是通过API还是内部调用使用应用程序中的JSON。在CF管理员中使用您选择的前缀启用"Prefix Serialized JSON"设置也可以帮助应对跨站点脚本攻击。

如果你不在Adobe CF服务器上,不用担心。Railo和Blue Dragon都具有相同的功能。

最新更新