PHP/MySQL — безопасные символы для отображаемых имен/имен пользователей/паролей, с PDO

немного новичком в PHP/MySQL...

Я создавал сайт на основе PHP, который использует базу данных MySQL для хранения информации о пользователях, такой как их отображаемые имена, имена пользователей и пароли.

Я узнал об экранировании, подготовленных операторах и тому подобном, а также о том, как предотвратить SQL-инъекции, такие как "bobby"); drop table users--.

Я использую подготовленные операторы PDO для получения пользовательского ввода из форм, чтобы зарегистрировать их в БД. Однако мне нужно знать несколько вещей:

  1. Поскольку я использую подготовленные операторы, для отображаемых имен, имен пользователей, пароли и т. д., могу ли я разрешить специальные символы, такие как @, #, $ или даже «одинарные» или «двойные» кавычки? А как насчет пространств, международные символы, символы с диакритическими знаками или что-то вроде ♥ ? И когда я спрашиваю, можно ли разрешить использование этих персонажей, я интересно, есть ли какие-либо дополнительные риски безопасности, которые могут возникнуть от разрешения кавычек или скобок в именах пользователей или вещах как html-теги для полужирного или курсивного шрифта?

  2. Если можно разрешить большинствоспециальных символов, но не некоторые: там какие-то конкретные "опасные" символы (в рамках MySQL) которые мне абсолютно необходимо сделать незаконными? (Я чувствую, что кавычки могут подойти эту повестку дня, но я получаю смешанные сигналы по этому поводу.)

  3. Если бы я разрешил использовать символы вне типичного «буквенно-цифрового и подчеркивание», есть ли подводные камни, с которыми я могу столкнуться позже (в MySQL, SQL или PHP) от разрешения странных символов? Буду ли я нужно как-то заставить html-теги отображаться как строки, а не фактические теги при отображении имен пользователей? Или мне нужно бежать кавычки в именах пользователей всякий раз, когда я хотел сделать с ними запрос? Или это не имеет значения, так как я буду использовать подготовленные операторы с ПДО?

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

  5. Я знаю, что некоторые кириллические буквы выглядят так же, как английские. Раньше я копировал их прямо из MS Word и использовал их в моих именах пользователей. Я понимаю, что их можно использовать для перцептивно выдавать себя за других участников, просто заменяя Английский "а" для кириллицы "а". Имена пользователей с ♥ в них могут быть сложными для поиска, если кто-то плохо разбирается в альтернативном коде. Если это быть проблемой? Каково ваше мнение по этому поводу?

Заранее благодарю всех, кто может дать мне некоторое представление об этом.

6
задан Jackson 20 June 2012 в 05:37
поделиться