Я наткнулся на этот отвечать,, который предлагает, кроме проверки того, что строка пуста, нам, вероятно, лучше вообще не проверять. Учитывая объем возможных символов при работе с международными именами,, это кажется разумным.
Должны ли мы вообще отказаться от проверки?
Достаточно ли подготовленных заявлений, когда речь идет о санации международных имен?
$pdo = $connection->prepare("INSERT INTO clicks (domain, sid) VALUES (:domain, :sid)");
$pdo->execute(array(
":domain" => $domain,
":sid" => $sid
));
Другой подход заключается в том, чтобы запретить определенные символы вместо того, чтобы пытаться сопоставить включенные символы. Однако это тоже будет сложно.
Если вы правильно привязываете входные значения к подготовленным операторам (похоже, что вы это делаете), то какие символы разрешены в значениях, на самом деле не имеют отношения к SQL-инъекциям, потому что значение не может стать частью запроса . stackoverflow.com/questions/8263371/…
@Don'tPanic, отлично.






Should we be foregoing validation altogether?
Наверное. Я согласен с ответом связанного пользователя. Попытки строить догадки об именах только причинят вам боль.
Are prepared statements sufficient when it comes to sanitizing international names?
Если все сделано правильно, то да. Обратите внимание, что недостаточно просто использовать подготовленные операторы, вам также необходимо использовать связанные параметры.
Я предполагаю, что вы имеете в виду это, но я чувствую, что должен быть педантичным здесь, потому что я часто вижу такого рода «подготовленное заявление»:
$db->prepare("select * from users where id = $id");
что я использую $pdo = $connection->prepare("INSERT INTO table (column) VALUES (:column), а затем либо связываю их по отдельности (например, $pdo->bindParam(":column", $column)), либо выполняю их как ассоциативный массив (например, $pdo->execute(array(":column" => $column)) достаточно ли этих подготовленных операторов для очистки международных имен?
@csabinho достаточно ли подготовленных заявлений в моем комментарии выше, чтобы очистить международные имена?
@csabinho Верно, это именно моя точка зрения. Я вижу это слишком часто, люди думают, что просто использование prepare() делает их безопасными. Я просто хотел указать, что вам также нужно связать.
@BugWhisperer Невозможно сказать, не видя всего кода, но да, у вас есть правильное основное представление об этом.
я добавил код. какой еще код вам нужно увидеть, чтобы узнать, является ли подготовленный оператор достаточной дезинфекцией для международных имен?
Код, который вы разместили, выглядит чистым и не должен подвергаться инъекциям.
быстрый вопрос, есть ли в конечном итоге привилегия, которую можно разблокировать, которая позволяет вам видеть, кто проголосовал против ваших материалов?
Насколько мне известно, нет.
объяснение отрицательного голосования было бы полезно...