2012-04-26 97 views
0

我有一個名爲Description的字段的jsp表單。聲明爲這個字段如下一個jsp表格的字段驗證

<input type="text" name="description"> 

用來組成SQL查詢此值:

SELECT * FROM發動機,其中描述LIKE '%(從場值)%'

當用戶輸入的字母數字字符可以正常工作,但用戶輸入特殊字符時會失敗,如單引號:'

我的q uestions:

  1. 我該如何處理這個在服務器端
  2. 如果有必要的JavaScript來實現,那麼已經被過濾什麼字呢?

謝謝。

+0

最終用戶可以完全控制JavaScript代碼。所以絕對不要在JavaScript中進行這種轉義。在服務器端使用'PreparedStatement'。無論你使用什麼框架都不支持它,責怪它的作者。這是一個**巨大的**設計錯誤,因爲它使得SQL注入攻擊面臨大門。 – BalusC 2012-04-26 14:24:51

回答

1

使用參數化查詢來處理這類問題。

+0

我想你在談論Java中的PreparedStatement,但是我不可能使用PreparedStatement,因爲框架不支持它。 – 2012-04-26 12:57:51

+0

您使用哪種框架連接到Oracle? – hkutluay 2012-04-26 12:58:49

3

準備使用,而不是撰寫的SQL查詢字符串聲明。你的方式容易受到SQL Injection attack的影響。

如果無法使用PreparedStatements,那麼在將此字段值傳遞給SQL查詢之前,請使用java正則表達式來移除特殊字符。

a post related to this task

請勿使用javascript濾除特殊符號。它不會保護你免受sql注入攻擊。攻擊者可能僞造他自己的表單而不驗證javascript並攻擊你的服務器。

0

你可以通過刪除基本驗證使用JavaScript和正則表達式無效字符:

<script type="text/javascript"> 
var str= document.getElementById('mySearch').value; 
str=str.replace(/[^A-Za-z0-9]/g,''); 
alert(str); 
</script> 

但我hkutluay同意,參數化查詢會是更好的途徑。