Мод переписать параметры запроса проверки и блокировки также запросить блокировку URL - PullRequest
2 голосов
/ 07 мая 2019

На моем сайте разрешены только несколько параметров запроса, но некоторые сканеры или хакеры, пытающиеся получить доступ к URL с уникальными параметрами, которые не поддерживает мое php-приложение, я могу заблокировать их на уровне php-приложения, проверив $_GETпараметров, но мой сервер загружается, поэтому я хочу показать 403, если параметры недействительны

Параметры запроса могут быть в любом порядке

Пока что я пыталсявыглядит следующим образом

# IF there is query string
RewriteCond %{QUERY_STRING} ^.+$

# Then parameters can be only query|debug|lang
# block any extra parameter
RewriteCond %{QUERY_STRING} !(^|$)(query|debug|lang)=[^&]+(&|$) [NC]

RewriteRule ^(.*)$ - [F,L]

Но проблема здесь заключается в том, что

http://example.com/search?query=test&debug=on&lang=en&foo=bar

его передача, даже если хакер передает foo=bar, я хочу показать 404, строгая проверка параметров до достижения приложения php.

Вот: Переписать тестер

Не отображается 404

Пример действительного URL с параметром запроса

http://example.com/search?query=test&debug=on&lang=en

Пример недействительного URL с параметром запроса

(Проверьте, есть ли какой-либо параметр запроса, кроме разрешенного ???)

http://example.com/search?query=test&debug=on&lang=en&foo=bar
http://example.com/search?a=1
http://example.com/search?a=2
http://example.com/search?query=test&a=1

То же самое я могу сделать в php, но яхочу заблокировать запрос, прежде чем достигнуть моего телПриложение p.

$allowed = array('query', 'lang', 'debug');
foreach($_GET as $key => $value)
{
         if(!in_array($key, $allowed))
         {
                  http_response_code(403)  
                  die('Forbidden');
         }
}

Также на моем веб-сайте допустимые символы запроса uri: [A-Za-z0-9_-]

Как я могу заблокировать, если запрос uri содержит что-то лишнее

Также хотитезнаете,

  1. можно ли при перезаписи также проверять переменные POST?
  2. Я вижу много подозрительных строк агентов, как их заблокировать
  3. Также я вижу в рефералехакеры, пытающиеся внедрить строки xss и sqlinjection, как их заблокировать.

Ответы [ 2 ]

1 голос
/ 15 мая 2019

Вы можете заменить существующее правило следующим правилом:

# Then parameters can be only query|debug|lang
# block any extra parameter
RewriteCond %{QUERY_STRING} ^(?!(?:query|debug|lang)=[^&]+(?:&(?:query|debug|lang)=[^&]+)*$). [NC]

RewriteRule ^ - [F]

Это правило вернет 403, если в URL присутствует какой-либо параметр запроса, отличный от query|debug|lang.

Здесь(?!...) - это отрицательное прогнозное утверждение , которое не будет выполнено, если в строке запроса есть что-либо, кроме заданных параметров.


Подробности RegEx:

  • ^: начало
  • (?!: начало отрицательного прогноза
    • (?:query|debug|lang)=[^&]+: совпадение с одним из 3 разрешенных параметров запроса и его значением
    • (?:: запустить группу без захвата
      • &: сопоставить &
      • (?:query|debug|lang)=[^&]+: сопоставить один из 3 разрешенных параметров запроса и его значение
    • )*: конец группы без захвата.* означает 0 или этой группы
    • $: конец
  • ): конец отрицательного прогнозного выражения
  • .: Убедитесь, что строка запроса не пуста

Проще говоря, отрицательный прогноз указывает на сбой, когда в строке запроса есть какой-либо параметр запроса, кроме 3 разрешенных параметров.

1 голос
/ 08 мая 2019

Вы можете использовать следующее:

RewriteEngine on

#if there is query string
RewriteCond %{QUERY_STRING} ^.+$
# Then parameters can be only query|debug|lang
# block any extra parameter
RewriteCond %{QUERY_STRING} !^(query|debug|lang)=[^&]+&(query|debug|lang)=[^&]+&(query|debug|lang)=[^&]+$ [NC]
RewriteRule .* - [F,L]

Это возвратит запрещенную ошибку 403 для URL, не соответствующих регулярному выражению RewriteCond.

...