我有一个名为Description
的字段的jsp表单。该字段声明如下
<input type="text" name="description">
此值用于组成SQL查询:
从引擎中选择*,其中描述如'%(来自字段的值)%'
当用户输入字母数字字符时,它可以正常工作,但当用户输入特殊字符时失败,例如单引号符号:'
我的问题:
谢谢。
答案 0 :(得分:3)
使用预准备语句而不是编写SQL查询字符串。你的方式易受SQL Injection attack的影响。
如果无法使用PreparedStatements,则在将此字段值传递给SQL查询之前,请使用java正则表达式删除特殊字符。
请勿使用javascript过滤掉特殊符号。它不会保护你免受sql注入攻击。攻击者可以在没有验证javascript的情况下伪造自己的表单并攻击您的服务器。
答案 1 :(得分:1)
使用参数化查询来处理这类问题。
答案 2 :(得分:0)
你所做的事情被认为是一种非常糟糕的做法,可能导致非常糟糕的事情...... http://en.wikipedia.org/wiki/SQL_injection
答案 3 :(得分: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,参数化查询将是更好的途径。