2013-03-21 2 views
-3

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

+0

-1 для создания этой услуги. – user0103

+0

До тех пор, пока вы используете MD5'ing или SHA1'в ввод при преобразовании * в * хэш, ничего не нужно санировать, не так ли? И при поиске существующего хэша это не должно содержать специальных символов, поэтому это * должно быть очищено. Я также повторил ваш вопрос. Это называется [tag: rainbowtable], а не [tag: hashtable] - это нечто другое. –

+0

@ WasimAbu-Nassar это мой первый проект программирования, в чем проблема? – crhodes

ответ

1

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

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

1

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

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

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

+0

Спасибо за ответ. Я думаю, что предложение @Danny Beckett является жизнеспособным вариантом, если я конвертирую строки в MD5 или SHA1, прежде чем они будут вставлены в базу данных, я предполагаю, что не будет никакой уязвимости. Хотя я буду рассматривать htmlspecialchars() для встраивания его в HTML-код, Спасибо – crhodes