on master help sign in
[fix] update query params sanitization - closes #722
commit28c75c187f8ec9971e09cf002a2ea7028f515473 authorAdam Tauber <asciimoo@gmail.com> dateMon 14 Oct 2019, 14:58 (7 years ago) parent07a0a50
1 file changed+16−10
searx/plugins/tracker_url_remover.py+16−10
searx/plugins/tracker_url_remover.py+16−10
@@ -17,10 +17,10 @@ along with searx. If not, see < http://www.gnu.org/licenses/ >.
1717
1818from flask_babel import gettext
1919import re
20−from searx.url_utils import urlunparse
20+from searx.url_utils import urlunparse, parse_qsl, urlencode
2121
22−regexes = {re.compile(r'utm_[^&]+&?'),
23− re.compile(r'(wkey|wemail)[^&]+&?'),
22+regexes = {re.compile(r'utm_[^&]+'),
23+ re.compile(r'(wkey|wemail)[^&]*'),
2424 re.compile(r'&$')}
2525
2626name = gettext('Tracker URL remover')
@@ -34,12 +34,18 @@ def on_result(request, search, result):
3434
3535 if query == "":
3636 return True
37−
38− for reg in regexes:
39− query = reg.sub('', query)
40−
41− if query != result['parsed_url'].query:
42− result['parsed_url'] = result['parsed_url']._replace(query=query)
43− result['url'] = urlunparse(result['parsed_url'])
37+ parsed_query = parse_qsl(query)
38+
39+ changed = False
40+ for i,(param_name,_) in enumerate(list(parsed_query)):
41+ for reg in regexes:
42+ if reg.match(param_name):
43+ parsed_query.pop(i)
44+ changed = True
45+ break
46+
47+ if changed:
48+ result['parsed_url'] = result['parsed_url']._replace(query=urlencode(parsed_query))
49+ result['url'] = urlunparse(result['parsed_url'])
4450
4551 return True