Меры предосторожности при обработке HTML-форм с использованием JavaScript, PHP, MySQL - PullRequest
1 голос
/ 13 августа 2010

Я не профессиональный веб-разработчик, но люблю веб-разработку как хобби. Я студент, и меня попросили создать веб-сайт отдела мероприятий. Мне нужно создать HTML-формы для регистрации пользователей. Я знаю об атаке сценариев XSS и инъекции SQL. Но не знаю, как они работают. Я использую PHP и MySQL на стороне сервера.

Я принимаю во внимание:

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

Все это я делаю, используя проверку RegEx - как с javascript, так и с PHP

Теперь мои вопросы:

  • Какие все символы я должен не допустить в мою базу данных?
  • Будет ли хорошо, если я преобразую <и> с их &lt; и &gt; альтернативами?
  • Что еще я должен учитывать, принимая данные?

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

Я искал в Google, но не смог найти правильный ответ. (

Ответы [ 2 ]

1 голос
/ 13 августа 2010

Чтобы предотвратить внедрение SQL, вы должны использовать функцию escape языка.Для PHP это mysql_real_escape_string.Или, что еще лучше, используйте PDO для ограничения того, что пользователи могут помещать в БД.

Атака HTML-инъекцией / XSS отличается;Вы можете хранить необработанный HTML в базе данных без проблем, но перед тем, как отобразит любой HTML-код, созданный пользователем, вызовите htmlspecialcharacters, чтобы предотвратить его интерпретацию веб-браузером клиента.* Не не кодируйте свои собственные проверки.Вы что-то упустите.

0 голосов
/ 13 августа 2010

Что касается имени пользователя, это должно сделать работу:

if (preg_match('/^[a-z\d_\-<>]{5,20}$/i', $username)) {
    echo "Your username is ok."; 
    // Note that you still have to do something with <>
    // Though, personally I'd advise sticking to /^[a-z\d_]{5,20}$/i
} else {
    echo "Wrong username format.";
}

Источник

Что касается SQL-инъекции, используйте mysql_real_escape_string или mysqli_real_escape_string для всего, что вы вводите вDB

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