Cfquery导致XSS和SQL注入问题

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)

Mar*_*ger 6

包含用户输入的每个查询都应该具有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)

...或者您可以根据已知允许输入列表检查每个用户输入(如果数据是可预测的).如果可能,这些技术应该是您的"最佳实践"列表的一部分.:)