Как запретить вставку неприемлемого содержимого в базу данных (PHP)

  • Автор темы Скатина
  • 40
  • Обновлено
  • 17, May 2024
  • #1
Привет,

Создал сайт для своего клиента https://www.jeenmount.com/

и клиенту нужно видеть, что люди ищут на его сайте. Поэтому мы вставляем каждый поиск в базу данных или увеличиваем количество поисков, если ключ там уже существует. Моя проблема заключается в неподходящем поиске, как показано ниже. ">alert(String.fromCharCode(88,83,83))

место назначения свадьбы'A=0

Розовый городской торговый центр в Джайпуре" или (1,2)=(select*from(se

Торговый центр Pink City в Джайпуре99999 'union select unhex(

исторический свадебный курортный отель в Джайпуре" и "x"="y"

Свадебный курортный отель Heritage в Джайпуре и 1>1 Я думаю, что этот тип поиска делают боты или что-то еще. Что я ищу, так это.

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

Пожалуйста, помогите нам, как мы можем это сделать.

Уже используется «mysql_real_escape_string» «htmlspecialchars» для безопасности, но невозможно остановить вставку нежелательного содержимого в базу данных.

Надеюсь на быстрый ответ.

Скатина


Рег
11 Oct, 2014

Тем
2

Постов
5

Баллов
25
  • 21, May 2024
  • #2
Большинство из них — хакерские коды, братан.

Как этот оповещенный поиск по JavaScript.

Они надеются, что если вы повторите или распечатаете поисковый запрос на веб-странице, этот код JavaScript будет выполнен в браузере.

Некоторые веб-сайты показывают посетителям «недавние/популярные поисковые запросы», а также отображают поисковый запрос на веб-сайте.

Таким образом, этот код предупреждения будет отображаться как поисковый запрос из базы данных, и когда вы его повторите/распечатаете, код будет выполнен в браузере.

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

Однако отсутствует, поэтому он не будет выполнен, но будет выглядеть плохо.

Другой, с «запросом выбора», пытается выполнить запрос к вашей базе данных.

Это не удается из-за того, что вы экранируете строку перед отправкой ее в базу данных.

« & 1>1» также является хакерским кодом.

Выполните Strip_tags($input) для поискового запроса перед отправкой его в базу данных.

Это удаляет весь HTML, так что код Javascript будет удален или, по крайней мере, станет безвредным.

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

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

Нравиться:

$term = $_POST['term'];

//удаляем html из термина

$term = обрезка (strip_tags ($ term));

//убедимся, что пользователь отправил что-то, а не просто пустой $term

если( strlen($term)>2 ){

//берём из поискового запроса только фиксированную длину, например первые 8 символов

$term= substr($term, 0, 8);

$term= addslashes($term);

//здесь вы можете использовать настоящий escape вместо добавления косой черты, делает то же самое.

//или вы можете использовать новую санацию PHP, которая также делает то же самое, что и addslashes.

$sql= "выберите поле1, поле2 из tableName, где поле типа '%$term%' ограничено 10";

//выполняем запрос, отображаем результат и т.д. и т.п.

//если результат найден, только тогда добавьте поисковый запрос в базу данных.

//нет смысла добавлять поисковый запрос, который не дал результатов...

}//strlen проверка окончания $term

?>

Другой вариант — создать большой файл ожидаемых спам-слов,

проверьте введенный поисковый запрос на наличие спам-слов.

Если найден, то игнорируем поисковый запрос.

Нравиться:

$spam=array('alert', 'select', 'union', '1>1' );

$term= addslashes(trim(strip_tags($_POST['term'])));

foreach($спам как $word){

if( strpos( strtolower($term), $word) !== false ){

//найдено спам-слово, игнорируйте или делайте что угодно

}

}

?>
 

araneis


Рег
16 Jul, 2014

Тем
0

Постов
2

Баллов
2
Тем
49554
Комментарии
57426
Опыт
552966

Интересно