Regex для обнаружения Javascript в строке - PullRequest
1 голос
/ 05 октября 2009

Я пытаюсь обнаружить JavaScript в моем значении строки запроса.

У меня есть следующий код c #

    private bool checkForXSS(string value) 
    {
        Regex regex = new Regex(@"/((\%3C)|<)[^\n]+((\%3E)|>)/I"); 

        if (regex.Match(value).Success) return true; 

        return false; 
    }

Это работает для обнаружения тегов <script></script>, но, к сожалению, если тегов не было, совпадение не достигается.

Возможно ли регулярное выражение сопоставить ключевые слова JavaScript, точки с запятой и т. Д.?

Это не распространяется на все базы XSS-атак. Просто способ обнаружить простые JS-атаки, которые могут иметь строковое значение.

Спасибо

Ответы [ 4 ]

9 голосов
/ 05 октября 2009

Nº 1 Правило: используйте белый, а не черный список.

Вы запрещаете один способ сделать XSS, а не любой. Чтобы достичь этого, вы должны сравнить ввод с тем, что вы должны принять как ввод пользователя, т.е.

  • Если вы ожидаете число, проверьте ввод по /^\d{1, n}$/
  • Если вы ожидаете строку, проверьте ее по /^[\s\w\.\,]+$/ и т. Д. *

Для получения дополнительной информации начните читать запись Википедии , запись на OWASP , статьи webappsec и некоторые случайные записи в блоге, написанные неизвестными

3 голосов
/ 05 октября 2009

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

  1. Проверено таким образом, что оно соответствует семантике собираемых данных;

  2. Соответствующие кавычки каждый раз, когда он используется для построения выражений, которые должны быть интерпретированы каким-либо языковым интерпретатором (SQL, HTML, Javascript - даже при переходе в простой текстовый файл журнала). Соответствующее цитирование полностью зависит от выходного контекста, и не существует единого способа сделать это.

1 голос
/ 08 октября 2009

Есть много способов встроить JavaScript. Э.Г.

  %3Cp+style="expression(alert('hi'))"

сделает это через ваш фильтр.

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

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

0 голосов
/ 05 октября 2009

Вам должно быть достаточно проверить, присутствует ли тег <script.

private bool checkForXSS(string value) 
{
    return value.IndexOf("<script") != -1;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...