Я читал разные источники, но я не уверен, как реализовать их в моем коде. Мне было интересно, может ли кто-нибудь дать мне быструю руку? Как только мне показали, как это сделать в моем коде, я смогу забрать его, я думаю! Это из автозаполнения AJAX, которое я нашел в сети, хотя я видел, что это связано с тем, что он уязвим для SQL Injection из-за «% $ queryString%» или чего-то еще? Любая помощь действительно ценится!
if ( isset( $_POST['queryString'] ) ) { $queryString = $_POST['queryString']; if ( strlen( $queryString ) > 0 ) { $query = "SELECT game_title, game_id FROM games WHERE game_title LIKE '%$queryString%' || alt LIKE '%$queryString%' LIMIT 10"; $result = mysql_query( $query, $db ) or die( "There is an error in database please contact support@laglessfrag.com" ); while ( $row = mysql_fetch_array( $result ) ) { $game_id = $row['game_id']; echo '<li onClick="fill(\'' . $row['game_title'] . '\',' . $game_id . ');">' . $row['game_title'] . '</li>'; } } }
Инъекционная уязвимость заключается в том, что вы передаете предоставленные пользователем данные прямо в запрос без его очистки. В частности, эта строка проблематична:
$queryString = $_POST['queryString'];
Если вы используете функцию mysql_real_escape_string()
вокруг $_POST['queryString']
, это не позволит пользователям вставлять свой собственный код.
$queryString = mysql_real_escape_string($_POST['queryString']);
Используйте mysql_real_escape_string () для всех значений из ненадежных источников, прежде чем конкатенировать значение в строку запроса. (Как правило, если вы не усложнили код в строке запроса, убегите от него). Например:
$queryString = mysql_real_escape_string($_POST['queryString']); $query = "SELECT game_title, game_id " . "FROM games " . "WHERE game_title LIKE '%".$queryString."%'" . "|| alt LIKE '%".$queryString."%' " . "LIMIT 10";
Часто проще использовать адаптер mysql, который поддерживает подготовленные операторы, которые заставляют забывать о том, чтобы санировать ввод намного сложнее. Например, PHP имеет pdo или mysqli