0

我有一个名为Description. 该字段声明如下

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

此值用于编写 SQL 查询:

select * from Engines where description like '% (Value from the field)%'

当用户输入字母数字字符时它可以正常工作,但是当用户输入特殊字符时它会失败,例如单引号:'

我的问题:

  1. 我该如何在服务器端处理这个问题
  2. 如果需要在 JavaScript 上实现,那么需要过滤掉哪些字符呢?

谢谢你。

4

4 回答 4

3

使用准备好的语句而不是编写 SQL 查询字符串。您的方式容易受到SQL 注入攻击

如果无法使用 PreparedStatements,则在将此字段值传递给 SQL 查询之前,使用 java 正则表达式删除特殊字符。

一个与此任务相关的帖子

不要使用 javascript 过滤掉特殊符号。它不会保护您免受 sql 注入攻击。攻击者可能会在没有验证 javascript 的情况下伪造自己的表单并攻击您的服务器。

于 2012-04-26T13:01:55.917 回答
1

使用参数化查询来处理这类问题。

于 2012-04-26T12:56:19.020 回答
0

你所做的被认为是一种非常糟糕的做法,可能会导致非常糟糕的事情...... http://en.wikipedia.org/wiki/SQL_injection

于 2012-04-26T12:58:47.273 回答
0

您可以使用 JavaScript 和 Regex 通过基本验证删除无效字符:

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

但我同意hkutluay,参数化查询将是更好的路线。

于 2012-04-26T13:03:33.340 回答