Как изменить значения URL-запроса в python?

 url = "http://www.example.com?type=a&type1=b&type2=c"
 urllist = get_urllist(url)
 trigger = ["'or '1'='1'"," 'OR '1'='2'","'OR a=a"]

def get_urllist(url): 
    url_parsed = urlparse.urlparse(url)
    #extract the query parameters of the URL 
    query =  urlparse.parse_qs(url_parsed.query)
    #get the list of query 
    query_list = query_list(query)
    #Get Base url 
    url = urlparse._replace(query=None).geturl()
    #modify url to get url_list 
    for query in query_list : 
       # change the original query to get the expected result 


 return url_list 


def query_list(query):
     for t in trigger:
         for key, value in query.items():
            query[key] += t
         query_list.append(query) 

     return query_list

Как вернуть список URL-адресов, изменив значения параметров запроса?

Исходный URL = "http://www.example.com?type=a&type1=b&type2=c "

Ожидаемый результат:

Url_list= ["http://www.example.com?type=a'ИЛИ '1 '='1'&type1=b'ИЛИ '1'='1'&type2=c'ИЛИ '1'='1'","http://www.example.com?type=a'ИЛИ '1'='2'&type1=b'ИЛИ '1'='2'&type2=c'ИЛИ '1'='2'","http://www.example.com?type=a'ИЛИ a=a&type1=b'ИЛИ a=a&type2=c''ИЛИ a=a" ]


person Anubhav Singh    schedule 25.04.2017    source источник
comment
Имеет ли OR xxx смысл для вас?   -  person luoluo    schedule 25.04.2017
comment
Между тем, ваш trigger правильный? список длиной 1?   -  person luoluo    schedule 25.04.2017
comment
ИЛИ '1'='1' используется для проверки внедрения SQL. Я просто пытаюсь автоматизировать это. Измененный триггер.   -  person Anubhav Singh    schedule 25.04.2017


Ответы (2)


В Python2.x

Вы можете использовать функцию urlparse.urlparse и метод ParseResult._replace:

import urlparse
url = "http://www.example.com?type=a&type1=b&type2=c"
trigger = ["'or '1'='1'"," 'OR '1'='2'","'OR a=a"]

parsed = urlparse.urlparse(url)
querys = parsed.query.split("&")
result = []
for pairs in trigger:
    new_query = "&".join([ "{}{}".format(query, pairs) for query in querys])
    parsed = parsed._replace(query=new_query)
    result.append(urlparse.urlunparse(parsed))

Примечание

Модуль urlparse переименован в urllib.parse в Python 3< /сильный>. Инструмент 2to3 автоматически адаптирует импорт при преобразовании ваших источников в Python 3.

В Python3.x

Вы также можете использовать функцию urlparse.urlparse.

import urllib.parse as urlparse
url = "http://www.example.com?type=a&type1=b&type2=c"
trigger = ["'or '1'='1'"," 'OR '1'='2'","'OR a=a"]

parsed = urlparse.urlparse(url)
querys = parsed.query.split("&")
result = []
for pairs in trigger:
    new_query = "&".join([ "{}{}".format(query, pairs) for query in querys])
    parsed = parsed._replace(query=new_query)
    result.append(urlparse.urlunparse(parsed))

ВЫВОД ДЕМО:

["http://www.example.com?type=a'or '1'='1'&type1=b'or '1'='1'&type2=c'or '1'='1'", "http://www.example.com?type=a 'OR '1'='2'&type1=b 'OR '1'='2'&type2=c 'OR '1'='2'", "http://www.example.com?type=a'OR a=a&type1=b'OR a=a&type2=c'OR a=a"]
person luoluo    schedule 25.04.2017
comment
К сожалению, этот метод устарел, по крайней мере, на Python 3. Вы получите: ModuleNotFoundError: нет модуля с именем «urlparse». - person ; 02.12.2017
comment
Проблема с этим методом заключается в том, что вы используете закрытый метод _replace - person AlexandreS; 20.06.2019
comment
Связанный ответ: stackoverflow.com/questions/21628852/change- имя хоста в URL - person Gabriel Devillers; 29.07.2019
comment
@AlexandreS _replace взял отсюда docs.python.org/dev/ библиотека/ - person Spidey; 24.11.2020

Вы можете использовать пакет furl.

from furl import furl

url = furl("http://www.example.com?type=a&type1=b&type2=c")
url.set({"type": "a'or '1'='1'"})
url.url

дает вывод: http://www.example.com?type=a%27or+%271%27%3D%271%27

и расшифровано: http://www.example.com?type=a'or '1'='1'

person AlexandreS    schedule 20.06.2019