From a9e161268ccc42b6bd466089a1b2dba6e540e1ca Mon Sep 17 00:00:00 2001 From: dctabuyz Date: Wed, 7 Jan 2015 12:55:26 +0500 Subject: [PATCH] IDN support: encode non-ascii domain names --- lib/environment.rb | 1 + lib/wpscan/wpscan_options.rb | 2 ++ spec/lib/wpscan/wpscan_options_spec.rb | 5 +++++ 3 files changed, 8 insertions(+) diff --git a/lib/environment.rb b/lib/environment.rb index 58be2da9..46270890 100644 --- a/lib/environment.rb +++ b/lib/environment.rb @@ -35,6 +35,7 @@ begin require 'nokogiri' require 'terminal-table' require 'ruby-progressbar' + require 'addressable/uri' # Custom libs require 'common/browser' require 'common/custom_option_parser' diff --git a/lib/wpscan/wpscan_options.rb b/lib/wpscan/wpscan_options.rb index 76b8fdbd..195c7be0 100644 --- a/lib/wpscan/wpscan_options.rb +++ b/lib/wpscan/wpscan_options.rb @@ -55,6 +55,8 @@ class WpscanOptions def url=(url) raise Exception.new('Empty URL given') if url.nil? || url == '' + url = Addressable::URI.parse(url).normalize.to_s unless url.ascii_only? + @url = URI.parse(add_http_protocol(url)).to_s end diff --git a/spec/lib/wpscan/wpscan_options_spec.rb b/spec/lib/wpscan/wpscan_options_spec.rb index 947229d9..2d689a25 100644 --- a/spec/lib/wpscan/wpscan_options_spec.rb +++ b/spec/lib/wpscan/wpscan_options_spec.rb @@ -32,6 +32,11 @@ describe 'WpscanOptions' do @wpscan_options.url = url expect(@wpscan_options.url).to be === url end + + it 'should encode IDN' do + @wpscan_options.url = 'http://пример.испытание/' + expect(@wpscan_options.url).to be === 'http://xn--e1afmkfd.xn--80akhbyknj4f/' + end end describe '#threads=' do