2012-04-26 100 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同意,参数化查询会是更好的途径。