如何防止SQL注入的ColdFusion?我對語言/框架頗爲陌生。如何防止SQL注入與ColdFusion
這是我的示例查詢。
<cfquery name="rsRecord" datasource="DataSource">
SELECT * FROM Table
WHERE id = #url.id#
</cfquery>
我看到傳遞url.id
的風險。
如何防止SQL注入的ColdFusion?我對語言/框架頗爲陌生。如何防止SQL注入與ColdFusion
這是我的示例查詢。
<cfquery name="rsRecord" datasource="DataSource">
SELECT * FROM Table
WHERE id = #url.id#
</cfquery>
我看到傳遞url.id
的風險。
使用<cfqueryparam>
標記爲您的ID:
http://www.adobe.com/livedocs/coldfusion/6.1/htmldocs/tags-b20.htm
<cfquery name="rsRecord" datasource="DataSource">
SELECT * FROM Table
WHERE id =
<cfqueryparam value = "#url.id#"
CFSQLType = "CF_SQL_INTEGER">
</cfquery>
<cferror>
處理站點另一種方法是使用存儲過程的具體行動(如果請求的數你的數據庫支持他們)。
http://livedocs.adobe.com/coldfusion/8/htmldocs/help.html?content=Tags_r-s_22.html
使用cfqueryparam是防止SQL注入是好的。但是,如果您想使用cfqueryparam,則無法在cfquery標記中使用cachewithin。我的另一個建議就是這樣做
把這個條件放在頁面的頂部。
< CFIF IsDefined( 「ID」)AND NOT則IsNumeric(ID)> < cfabort showerror = 「無效的查詢字符串」 > </CFIF >
在查詢標籤,使用就像這樣:
WHERE ID = #Val(ID)#
也參見,如何防止: http://ppshein.wordpress.com/2008/08/28/block-ip-in-coldfusion/
比手動實施數據庫保護更好地手動實施緩存。 – 2010-05-21 09:16:55
可能更好地使用cfparam來強制打字至少,但是我同意,最好搞砸緩存而不是搞砸安全 – Grey 2010-05-21 13:16:29
除了cfqueryparam您可以在頁面頂部使用cfparam包含傳遞給它的每個變量的SQL。這也有助於文檔。
例如
<cfparam name="url.id" type="integer">
或更先進:
<cfparam name="url.id" type="regex" pattern="\d" default="">
由於正則表達式模式是允許的,這些可以非常強大:
<cfparam name="form.place" type="regex" pattern="[A-Z0-9]{1,6}|" default="">
<!--- Upper case Alpa or Numeric, 1-6 characters or empty string --->
另外,還要確保你在應用程序中使用cferror
。 cfm或application.cfc以防止暴露您的查詢表和列名稱。
@Joel Coehoorn - 你能舉一個例子嗎?謝謝! – 2010-04-07 13:28:42