Очистка имени пользователя в PHP $ _POST - как это не нормально - PullRequest
0 голосов
/ 17 октября 2011

Я гуглил и искал SO и все такое, но я не могу прийти к ответу.

Почему код PHP ниже пропускает знак плюс через:

$aValid = array('-', '_', '.');

if (ctype_alnum(str_replace($aValid, '', $_POST['Rusername']))){

(Если пользователь вводит 1234+, он продолжается как действительный ????).

Я обычно находил обход, но действительно ли это необходимо;

$aValid = array('-', '_', '.'); 
if (ctype_alnum(str_replace($aValid, '', (htmlentities ( trim ( $_POST['Rusername'] ) , ENT_NOQUOTES ))))){
    echo "+ ok";
}else{
    echo "+ not ok";
}

Я хотел быиспользовать этот вид проверки и просто добавлять специальные символы в $ aValid, когда это необходимо.

Перед вставкой в ​​MySQL я бы сделал mysql_real_escape_string или подготовил операторы.

Любые идеи, почему знак + подходит дляпервый кусок кода.По моему мнению, это действительно не должно быть.

Последнее обновление - мне потребовалось несколько часов низкоуровневой отладки HTTP-заголовков, чтобы выяснить, что моя сторона A изменила Content-Type, чтобы знак + стал пробеломдо того, как он попал в PHP, если предложение (разрешено в моем белом списке) ...

Что - я надеюсь, что это никогда не случится с вами - опыт:)

Напоминание: jQuery должен бытьупомянуто, был ли он таким крупным игроком в этом процессе проверки ...

Ответы [ 2 ]

2 голосов
/ 17 октября 2011

Что вам нужно сделать, это проверить каждую стадию процесса, а не отбрасывать их все в одну строку:

$name = $_POST['Rusername'];
var_dump($name);
$name = str_replace($aValid, '', $name);
var_dump($name);

и т.д ... Базовая отладка. Если у вас есть несколько этапов в утверждении, то проверьте каждый отдельный этап. Возможно, ctype работает отлично, но str_replace как-то не работает.

0 голосов
/ 17 октября 2011

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

Это не нормально ... первый фрагмент кода возвращает false ..

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

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