У меня есть вход, который позволяет пользователям вводить текст, который затем отправляется с использованием PHP на другую страницу, где он хранится в базе данных. Я проделал некоторую простую проверку (проверяя, был ли вход не пустым), и это работает очень хорошо. Тем не менее, я обнаружил, что могу вводить теги HTML, например
<p>
и он обходит эту валидацию, а также вмешивается в ввод.
Как проверить, содержит ли вход теги HTML, и если да, верните ошибку?
Чтобы проверить, попробуйте это:
if( preg_match('#^<.>.+</.>$#', $your_value) ){ echo "NOT GOOD"; // and some error too }
Вы можете сделать это:
<input type='text' pattern='[a-zA-Z0-9]+'>
Это гарантирует, что только буквы и цифры могут войти и не будут отправляться, если что-либо еще внутри входа.
Однако это только хорошая клиентская сторона и будет работать только для IE9 +
Это также не лучший метод проверки, если кто-то знает, что он делает. Все, что им нужно сделать, это перейти в исходный код, чтобы вынуть атрибут pattern
, но для тех, кто этого не знает, все будет хорошо.
Для PHP вы можете использовать strip_tags()
. Найдено здесь
Вы можете просто использовать htmlspecialchars или strip_tags перед вставкой в базу данных.
Вы также можете использовать mysqli_real_escape_string или PDO :: quote для защиты строк