2016-04-02 4 views
0

У меня есть метод, который сканирует URL на веб-сайт, который содержит ошибку:Invalid следующая ошибка компиляции

def begin_vulnerability_check 
    info("Checking if sites are vulnerable.") 
    IO.read("#{PATH}/temp/SQL_sites_to_check.txt").each_line do |parse| 
    Timeout::timeout(10) do 
     parsing = Nokogiri::HTML(RestClient.get("#{parse.chomp}")) 
     info("Parsing page for SQL syntax error: #{parse.chomp}") 
     if parsing.css('html')[0].to_s[/You have an error in your SQL syntax/] 
     successful = parse 
     success("URL: #{parse.chomp} returned SQL syntax error, dumped to SQL_VULN.txt") 
     File.open("#{PATH}/lib/SQL_VULN.txt", "a+"){|s| s.puts(parse)} 
     sleep(1) 
     else 
     err("URL: #{parse.chomp} returned and error, dumped to non_exploitable.txt") 
     File.open("#{PATH}/lib/non_exploitable.txt", "a+"){|s| s.puts(parse)} 
     sleep(1) 
     end 
    end 
    end 
end 

Во время тестирования я сканирования через этот список URL-адресов:

http://www.bible.com/subcat.php?id=2' 
http://www.cidko.com/pro_con.php?id=3' 
http://www.slavsandtars.com/about.php?id=25' 
http://www.police.gov/content.php?id=275' 
http://www.icdprague.org/index.php?id=10' 
http://huawei.com/en/plugin.php?id=hwdownload' 
https://huawei.com/en/plugin.php?id=unlock' 
https://facebook.com/profile.php?id' 
http://www.footballclub.com.au/index.php?id=43' 
http://www.mesrs.gouv/index.php?id=1525' 

I также спасательный блок, который предполагает, чтобы поймать исключение Timeout::Error и перейти к следующему URL-адресу в списке:

begin 
    begin_vulnerability_check 
rescue Timeout::Error 
    if Timeout::Error 
    warn("Page timed out, this is usually cause by the page returning a white page, or being non-existent, skipping.") 
    next 
    end 
end 

Ho Веверу при попытке запустить эту программу, я получаю следующее сообщение об ошибке:

whitewidow.rb:130: Invalid next 
whitewidow.rb: compile error (SyntaxError) 

Линия 130:

rescue Timeout::Error 
    if Timeout::Error 
    warn("Page timed out, this is usually cause by the page returning a white page, or being non-existent, skipping.") 
    next #<= HERE 
    end 
end 

Мой вопрос заключается в том, я с помощью next в неправильном смысле? Мне кажется, что следующий будет, если это произойдет, переходите к следующей строке, я ошибаюсь, думая так? Как я могу реорганизовать это на работу?

+1

Вы можете использовать 'next', чтобы перейти к итерации при переборе с' Enumerable'. – Mischa

+0

@ Миша вы могли бы разработать немного больше? – 13aal

+0

Кстати, что вы собираетесь делать, когда найдете сайт с уязвимостью? – Mischa

ответ

1

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

Но вам даже не нужно next, потому что при спасении ошибки таймаута итерация автоматически продолжит следующую строку. Вам просто нужно переместить rescue внутри итерации each_line.

Ваш код должен быть что-то вроде этого:

def begin_vulnerability_check 
    IO.read("#{PATH}/temp/SQL_sites_to_check.txt").each_line do |parse| 
    begin 
     Timeout::timeout(10) do 
     ... 
     end 
    rescue Timeout::Error 
     # Will automatically continue with next line after this 
    end 
    end 
end 
+0

Спасибо за помощь, я упомянул вас в титрах;) – 13aal

+1

Вы можете определенно использовать 'next' вне перечисления. 'next' для блоков, что' return' для методов: он возвращает значение из блока. Совершенно неуместно, используется ли этот блок для перечисления, запуска потока, ленивой оценки, закрытия или даже не используется вообще. –

+0

Спасибо, я не знал об этом. – Mischa

Смежные вопросы