Проверьте, находится ли отправляющее значение в массиве?


Недавно я прочитал статью, в которой говорилось, что вы никогда не должны доверять пользователю в отправке данных.

Итак, предположим, что у меня есть следующие входные данные формы:

<label for="input1">Answer 1</label>
<input type="radio" name="question1" value="answer1" id="input1" />
<label for="input2">Answer 2</label>
<input type="radio" name="question1" value="answer2" id="input2" />
<label for="input3">Answer 3</label>
<input type="radio" name="question1" value="answer3" id="input3" />

Можно ли проверить, находится ли опубликованный ответ внутри aray с ответами:

$question1_answers = array("answer1", "answer2", "answer3");
$answer1 = $_POST['question1'];
if ( in_array($answer1, $question1_answers) ) {
    echo "OK!";
} else {
    echo "Please select proper answer!";
}

Или, может быть, приведенный выше код не нужен, и я должен просто прочитать $_POST['question1'], и этого будет достаточно?

Author: user1292810, 2012-10-10

3 answers

Можно ли проверить, находится ли опубликованный ответ внутри aray с ответами:

Да! Это очень хорошая практика для проверки такого значения переключателя. Статья, которую вы прочитали, верна, вы не должны слепо доверять предоставленным пользователем данным.

 4
Author: MrCode, 2012-10-10 07:24:01

Для вашей ситуации это безопасно и достаточно. Как я предполагаю, этот пост был о внедрении sql, межсайтовых сценариях или чем-то в этом роде. Вы можете прочитать о внедрении sql здесь:

Http://en.wikipedia.org/wiki/Sql_injection

И о межсайтовых сценариях здесь:

Http://en.wikipedia.org/wiki/Cross-site_scripting

 2
Author: Giorgi Peikrishvili, 2012-10-10 07:27:00

Оба способа верны. Но я рекомендую первый способ, который вы опубликовали.

 1
Author: Yogesh Suthar, 2012-10-10 07:24:21