Я должен также санировать данные, прибывающие из $ _GET, если я использую тех, не изменяя государство DB?

Если я также санирую данные, прибывающие из $ _GET, если те данные не собираются изменять государство базы данных.

example of changing the state of database is INSERT, DELETE
example of not changing the state is SELECT.

the problem i think about not sanitizing is this

inside code

$word = $_GET['word'];
$query = "SELECT * FROM tbl_example WHERE name LIKE '%$word%'"; 
mysqli_query($query);


then the data you search is

testword%';DROP TABLE tbl_example; -- 


so final value of $query is

SELECT * FROM tbl_example WHERE name LIKE '%testword%';DROP TABLE tbl_example; -- %'

НО я предполагаю, что эта работа привычки вызывает mysqli_query, и mysql_query() может только выполнить единственный SQL-оператор.

Также, если вы санируете $ _GET тогда в базе данных есть, 'тогда вы ищете' свой поиск, будет соответствовать тому в DB?

Можно ли также показать мне примеры внедрения SQL?

0
добавлено отредактировано
Просмотры: 1
de
См. также этот канонический вопрос о ссылке и Википедия для получения дополнительной информации о Внедрении SQL, включая примеры.
добавлено автор Charles, источник

3 ответы

Скажем, у вашего стола есть 1 миллион рядов, и вы не санируете $ _GET как в примере выше тогда, кто-то может эксплуатировать ваш поиск так, чтобы это возвратило весь 1 миллион рядов, и затем ваш сервер попытается показать всех тех, и это понизится. Это - всего один пример.

Пример

$_GET["word"]="test%' or name LIKE '";
$word = $_GET['word'];
$query = "SELECT * FROM tbl_example WHERE name LIKE '%$word%'"; 

Вопрос

SELECT * FROM tbl_example WHERE name LIKE '%test%' or name LIKE '%'
2
добавлено
Деяние - деяние, плохая практика - плохая практика imo. Doesnt имеют значение, прост ли ваш сайт или огромен. Как Мерфи сказал, "если что-то может пойти не так, как надо, это пойдет не так, как надо"
добавлено автор Hanky Panky, источник
действительно не получил тот вопрос, можно ли объяснить немного больше?
добавлено автор Hanky Panky, источник
таким образом, что, если мой сайт просто прост??
добавлено автор user1933652, источник
если вы санируете $ _GET тогда в базе данных есть ' тогда вы ищете ' ваш поиск будет соответствовать тому в DB?
добавлено автор user1933652, источник
хорошо, если в вас база данных (безотносительно области) есть стоимость ' тогда вы ищете ' конечно, вы убегаете так, это станет \' будет тот матч тот в базе данных, которая является только '
добавлено автор user1933652, источник

то, что необходимо использовать, является подготовленными вопросами вместо, санируют данные, прибывающие из $ _GET

вы используете mysqli как MySQL и даже не убегаете, ДОБИРАЮТСЯ..., необходимо использовать подготовленные вопросы

необходимо использовать как

/* create a prepared statement */
if ($stmt = $mysqli->prepare("SELECT District FROM City WHERE Name=?")) {

    /* bind parameters for markers */
    $stmt->bind_param("s", $city);

    /* execute query */
    $stmt->execute();

    /* bind result variables */
    $stmt->bind_result($district);

    /* fetch value */
    $stmt->fetch();

    printf("%s is in district %s\n", $city, $district);

    /* close statement */
    $stmt->close();
}

from PHP manual

польза прочитана

Очистка данных пользователя в ДОБИРАЮТСЯ PHP

1
добавлено
Я думаю, что вы не отвечали на мой вопрос, вы просто предлагаете решение.
добавлено автор user1933652, источник

Это кажется, что вы пытаетесь найти оправдания не санировать данные. Это - вид подобного высказывания, "Я не должен ставить свой ремень безопасности, если я только веду половину мили, не так ли?" Почему таким образом колеблющийся от последовательного использования методов наиболее успешной практики?

Кроме того, не беспокойте santizing ваши данные. Вместо этого используйте параметризованные вопросы как другие ответы, говорят вам.

Другие дали вам примеры, что даже ИЗБРАННОЕ восприимчиво к злонамеренному входу, но вы, кажется, желаете даже обойти те причины. Не боритесь с ним. Войдите в хорошие привычки и сделайте его правильно.

1
добавлено
Лучший способ очистить ваш ум состоит в том, чтобы использовать параметризованные вопросы, так, чтобы вы don' t тратят впустую ваше время и мозговую энергию, пытающуюся выяснять, когда абсолютно необходимо санировать данные.
добавлено автор Andy Lester, источник
Хорошо я получаю его, мне просто любопытно
добавлено автор user1933652, источник
если вы санируете $ _GET тогда в базе данных есть ' тогда вы ищете ' ваш поиск будет соответствовать тому в DB? действительно ли можно ли, пожалуйста, очистить мой ум на этом??
добавлено автор user1933652, источник