C# - использование регулярного выражения для сопоставления нескольких конкретных слов из url-адреса

Я пытаюсь создать инструмент, который будет сохранять только URL-адреса примерно так: page_id? id = 1 '

http://mechanikrolniczy.cba.pl/viewtopic.php?p=16176'
http://all-tubes-jenna-haze.mzs-dgd.ru/index.php?route=product&product_id=9108429'
https://websetnet.net/page/40/?q=%2Fbs%2Fpage%2F40%2F&loginid=117cee5a78'

в первом URL-адресе вы можете увидеть: .php? p = 16176 ', а во втором URL-адресе product_id = 9108429'

и в каждом URL он может быть разным ...

поэтому я хочу использовать регулярное выражение, чтобы найти только слова, начинающиеся с? something = numberORwords ' Я должен убедиться, что он заканчивается на '

Я пытался это сделать последние 2 часа, но по какой-то причине не смог ... Я даже придумал что-то вроде этого:

^&/]\Wpage_id\W[=0-9]+|\W?item_id\W[=0-9]+|\W?p\W[=0-9]+\Wview\W[=0-9]+\Wno\W[=0-9]+|\Wimage_id\W[=0-9]+|\Wv\W[=0-9]+|\Wsequence\W[=0-9]+|\Wid\W[=0-9]+|\Wstart\W[=0-9]+[']

Мой код:

 string pattern = @"([?][\w]+[=][\w]+)[']";
        foreach(string s in urls)
        {
            Match m = Regex.Match(s, pattern);
            if (m.Success)
            {
                Valid.Add(s);
                Console.WriteLine(s);
            }
        }

Редактировать: что я пытаюсь сделать, так это проверить, есть ли на веб-сайте символ "at" после параметра, который может быть уязвим для SQL-инъекции.

рассмотрите возможность использования подпрограмм библиотеки фреймворка: stackoverflow.com/q/659887/1132334

Cee McSharpface 13.09.2018 21:24

ну ладно :) а как это можно сделать с помощью регулярного выражения?

Yuri 13.09.2018 21:30
1
2
70
1

Ответы 1

Этот шаблон охватывает все случаи, которые существуют в приведенных выше примерах.

([?][\w]+[=][\w]+)?([&][\w]+[=][\w]+)*[']

Мы ищем следующие условия:

  • ?someWord=numbersOrletters (первая группа захвата)
  • &someWord=numbersOrletters (вторая группа захвата)
  • оканчивается символом ' (последнее предложение)

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

Я использую regexr.com для создания и тестирования этих вещей, это действительно полезный инструмент.

edit: Этот шаблон захватывает подстроку route=product во втором опубликованном вами URL. Если вы хотите избежать этого, измените шаблон для поиска строк цифр \d, а не слов \w (слова также могут содержать цифры, но цифры не могут содержать буквенные символы).

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

AlexanderGriffin 13.09.2018 21:53

о, я использовал regex101, и я по какой-то причине не могу сейчас получить какие-либо URL-адреса, я отредактирую вопрос и покажу свой код

Yuri 13.09.2018 21:53

Похоже, вы не включили все выражение в свой код, также последний добавленный вами URL не заканчивается символом ', если вы хотите сделать это условие необязательным, добавьте? до конца выкройки.

jdavison 13.09.2018 21:59

Я испортил весь вопрос, я попытался проверить, есть ли на веб-сайте 'после параметра, который может быть уязвим для SQL-инъекции, но я думаю, что мне нужно отправить веб-запрос или что-то еще, а не проверять URL-адреса из текстовых файлов

Yuri 13.09.2018 22:01

Это не тот веб-сайт, на котором можно публиковать советы о том, как настроить таргетинг на серверы для SQL-инъекции.

jdavison 13.09.2018 22:07

Другие вопросы по теме