我正在使用JSP一段时间。我有这个选择声明:
query = "SELECT * FROM USER_PASS WHERE USERNAME = '" + name + "'";
哪个易受SQL注入攻击。我搜索了一些文章,发现我可以使用预处理语句来避免SQL注入。我发现它更令人困惑。我的意见是,如果我可以在用户提供的输入中找到;
,'
或--
等输入,那么我可以向他们显示一条警告消息,说明您不能在此处使用这些符号我不会处理数据。这可能是我的JavaScript代码:
function validateSQL()
{
var x=document.forms["myForm"]["username"].value;
var pos = 0;
pos=x.indexOf("'");
if (pos!=0)
{
alert("Trying to hack me?");
return false;
}
}
哪个更好用?这有什么缺点吗?
答案 0 :(得分:6)
您绝对不能依靠客户端上的JavaScript来保护您;恶意用户可以轻松绕过任何客户端检查..您可以随时在浏览器中禁用JavaScript。
仅仅因为某些事情令人困惑并不意味着你不应该这样做;参数化查询不会混淆,所以你应该练习和学习,直到你明白。 ; , --
甚至不能接近可能导致SQL注入的唯一符号。
我不熟悉JSP,准备查询的方法看起来很简单。
String myquery = "SELECT * FROM USER_PASS WHERE USERNAME = ?";
PreparedStatement mystatement = connection.prepareStatement(myquery);
mystatement.setString(1, name);
ResultSet myresults = mystatement.execute();