2013-02-23 3 views
-1

Я использую JSP некоторое время. У меня есть этот запрос:Предотвращение SQL-инъекций с использованием JavaScript/jQuery

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

+0

@Blender: Если я пишу готовое заявление вместо этого кода javascript, это предотвратит инъекции? –

+2

Я бы +10 комментарий Блендера, если бы мог - * не доверять клиенту *. Подготовленные инструкции на сервере предотвращают * все * атаки SQL-инъекций (но не обязательно другие поверхности). Нет. Предотвращение плохой информации выходит за рамки SQL-инъекций. – 2013-02-23 06:18:40

ответ

6

Вы абсолютно не можете зависеть от JavaScript на Клиенте, чтобы защитить вас; злонамеренные пользователи могут легко обойти любые проверки на стороне клиента. Вы можете просто отключить JavaScript в любое время в своем браузере.

Просто потому, что что-то вводит в заблуждение, это не значит, что вы не должны этого делать; параметризованные запросы не путают, поэтому вы должны практиковать и учиться, пока не поймете. ; , -- даже не близки к единственным символам, которые могут вызвать SQL Injection.

Я не знаком с JSP, метод подготовки запросов кажется достаточно простым.

String myquery = "SELECT * FROM USER_PASS WHERE USERNAME = ?"; 
PreparedStatement mystatement = connection.prepareStatement(myquery); 
mystatement.setString(1, name); 
ResultSet myresults = mystatement.execute(); 
Смежные вопросы