2013-02-23 57 views
-1

我正在使用JSP一段时间。我有这个选择语句:使用JavaScript/jQuery防止SQL注入

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; 
    } 
} 

哪个更好用?这有什么缺点吗?

+9

谁说攻击者要使用你的前端?自动SQL注入工具只是发送HTTP请求。 – Blender 2013-02-23 06:16:56

+0

@Blender:如果我正在编写一个preparedstatement而不是此JavaScript代码,那么它会阻止注入? – 2013-02-23 06:18:27

+2

我会+10 Blender的评论,如果我可以 - *不信任客户端*。在服务器上准备好的语句将防止所有SQL注入攻击(但不一定是其他表面)。不是:防止不良信息超出了SQL注入攻击的范围。 – 2013-02-23 06:18:40

回答

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();