Cra*_*g24 1 xss coldfusion sql-injection cfquery
我最近运行了一个应用程序扫描(IBM),现在我正在尝试修复出现的问题.我的大部分问题源于cfquery(见下文).我试图得到它,以便存储的XSS和SQL注入问题不会出现在我的扫描上.任何帮助将不胜感激,因为这是我第一次做某种事情.
谢谢!
<cfquery name="enter_question" datasource="#dsn#">
INSERT INTO xx_questions(q_id,
q_name,
q_narrative,
q_used,
q_type)
VALUES( #variables.new_q_id#,
'#form.q_name#',
'#form.q_narrative#',
'n',
#form.q_type#)
</cfquery>
Run Code Online (Sandbox Code Playgroud)
包含用户输入的每个查询都应该具有cfqueryparam,如下所示:
<cfquery name="enter_question" datasource="#dsn#">
INSERT INTO xx_questions(q_id,
q_name,
q_narrative,
q_used,
q_type)
VALUES(
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#variables.new_q_id#"/>,
<cfqueryparam cfsqltype="CF_SQL_CHAR" value="#form.q_name#"/>,
<cfqueryparam cfsqltype="CF_SQL_CHAR" value="#form.q_narrative#"/>,
<cfqueryparam cfsqltype="CF_SQL_CHAR" value="n"/>,
<cfqueryparam cfsqltype="CF_SQL_INTEGER" value="#form.q_type#"/>)
</cfquery>
Run Code Online (Sandbox Code Playgroud)
的cfsqltype需要,以反映xx_questions表的cooresponding列的数据类型-但你的想法.
以这种方式将变量绑定到类型会自动保护您免受SQLi注入.XSS注入是另一回事.那是用户输入输出到页面上的时候.如果用户将某些内容(例如脚本标记)推送到DB中的列中,然后将其输出到您没有真正遭受注入的页面上(它们为您提供了一个字符列,您输入了一个字符列,它们就是不改变查询的性质).但是在论坛应用程序或任何其他区域中,一个用户的用户输入被显示给另一个用户,您可能会受到恶意代码感染.
因此,需要针对恶意代码审查每种字符类型.使用Foundeo之类的东西作为Web应用程序防火墙可以做到这一点.您还可以使用CF管理员或在应用程序级别使用cfapplication标记的scriptprotect属性或application.cfc中的props来保护服务器级别的页面.
您也可以使用HTMLEditformat在数据库插入中手动保护,如下所示:
<cfqueryparam cfsqltype="CF_SQL_CHAR" value="#htmleditformat(form.q_narrative)#"/>,
Run Code Online (Sandbox Code Playgroud)
...或者您可以根据已知允许输入列表检查每个用户输入(如果数据是可预测的).如果可能,这些技术应该是您的"最佳实践"列表的一部分.:)
| 归档时间: |
|
| 查看次数: |
194 次 |
| 最近记录: |