Как я могу очистить ввод для хеш-конвертера в PHP?

Я создал веб-сайт, который генерирует хэши от пользователей, вводящих простой текст, пользователь может ввести слово / фразу и выбрать из MD5 или SHA1 (или обоих). Затем сайт принимает эти данные и преобразует их в MD5 & SHA1 и сохраняет их в базе данных, а затем возвращает их пользователю. Пользователи также могут вводить хеш-коды в строку поиска, и, если база данных имеет хеш-код, она будет возвращать исходное слово, цель состоит в том, чтобы создать хеш-таблицы с использованием краудсорсинга, одновременно предоставляя пользователям преимущества. У меня работает основной функционал, но у меня возникла дилемма о том, что я должен дезинфицировать, я хочу, чтобы пользователи могли вводить специальные символы, так как это повысит шансы функции поиска, возвращающей результат, любой совет будет оценен, спасибо.

2 ответа

Решение

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

Вы, конечно, должны очистить все входные данные вашей базы данных (как для вставки, так и для поиска). Однако, если вы не используете устаревший API базы данных, который не поддерживает параметризованные запросы (например, mysql_* функции; избегайте этого) это будет сделано автоматически.

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

Конечно, если вы отображаете входную строку на странице результатов, вы должны экранировать ее с помощью http://php.net/htmlspecialchars, прежде чем встраивать ее в HTML-код. Точно так же, если вы включаете его в качестве параметра в URL, вы должны экранировать его с помощью urlencode (), а если вы храните его в базе данных SQL, вы должны экранировать его с помощью соответствующей функции экранирования для вашего драйвера базы данных (например, mysqli:: escape_string ()), или просто используйте подготовленные операторы SQL с заполнителями.

Также обратите внимание, что криптографические хеш-функции работают с байтовыми строками, а не с символьными строками. Это означает, что, особенно для текста, содержащего не-ASCII-символы, значение хеш-функции будет зависеть от кодировки символов, используемой для кодирования его в байты. Для текста Unicode это также может зависеть от используемой формы нормализации. UTF-8 (с формой нормализации C или D или просто с тем, что посылает браузер пользователя) может быть довольно распространенным выбором в наши дни, но если вы хотите быть полезным, вы можете предложить своим пользователям выбор различных кодировок.

Другие вопросы по тегам