Я знаю, что уже задал вопрос о очистке и экранировании, но у меня есть вопрос, на который не было ответа.
Хорошо, вот оно. Если у меня есть PHP-скрипт, и я GET
ввожу данные пользователей и SELECT
из базы данных mySQL, будет ли это иметь значение/представлять ли какую-либо угрозу безопасности, если я не избежал <
и >
с помощью htmlspecialchars
, htmlentities
или strip_tags
и поэтому разрешено выбирать/искать HTML-теги в базе данных? Поскольку ввод уже очищается с помощью trim()
, mysql_real_escape_string
и addcslashes
(\%_).
Проблема с использованием htmlspecialchars
заключается в том, что он экранирует амперсанд (&), который должен разрешать пользовательский ввод (полагаю, то же самое относится и к htmlentities
?). При использовании strip_tags
что-то вроде "John" приводит к тому, что PHP-скрипт выбирает и отображает результаты для John, чего он не должен делать.
Вот мой PHP-код для очистки ввода перед выбором из базы данных:
if(isset($_GET['query'])) {
if(strlen(trim($_GET['query'])) >= 3) {
$search = mysql_real_escape_string(addcslashes(trim($_GET['search']), '\%_'));
$sql = "SELECT name, age, address WHERE name LIKE '%".$search."%'";
[...]
}
}
И вот мой вывод для отображения результатов «x соответствует y».:
echo htmlspecialchars(strip_tags($_GET['search']), ENT_QUOTES, 'UTF-8')." matched y results.";
&amp;
- person Marc B   schedule 23.04.2013mysql_*()
. Как я уже сказал @jball037, мне неоднократно предлагали это. Но я просто хотел знать, поможет ли то, что я упомянул выше. Кстати,addcslashes
предназначен для защиты моего PHP-скрипта от отображения всего из базы данных, посколькуmysql_real_escape_string
(насколько я понял) не экранирует подстановочные знаки, такие как%
и_
. И причина, по которой я добавил `` туда, заключается в том, что поиск John\'s будет искать в базе данных John's, что здесь не предусмотрено. - person AnonymousJ   schedule 23.04.2013John\'s
в поле поиска? Это никогда не взлетит. Вы позволяете им вводить все, что они хотят, а затем используете соответствующее экранирование, чтобы БЕЗОПАСНО получить эти данные в запросе. помните: mysql на самом деле не СОХРАНЯЕТ обратную косую черту в тексте. они удаляются как часть этапа разбора запроса. Если у вас естьINSERT ... VALUES ('John\'s')
, тоJohn's
- это то, что на самом деле сохраняется в БД, а неJohn\'s
. - person Marc B   schedule 23.04.2013<b>John's</b>
илиJohn\'s
и т. д., удалив теги HTML и разрешив обратную косую черту, а затем отобразить результаты из базы данных, как если бы они искалиJohn's
. Но мой способ сделать это (отображение ошибки о том, что их поиск не дал никаких результатов) неверен? - person AnonymousJ   schedule 23.04.2013