2016-04-02 34 views
0

I持ってエラーが含まれ、ウェブサイトの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:私は、URLのこのリストをスキャンしていますテスト中

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 

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 

ホー:も例外Timeout::Errorをキャッチし、リスト内の次のURLに移動すると仮定された救助ブロックを持っていますweverこのプログラムを実行しようとしたときに、私は次のエラーを取得する:

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

。 – Mischa

+0

@ミシャーもう少し詳しいことができますか? – 13aal

+0

ところで、脆弱性のあるサイトを見つけたらどうしますか? – Mischa

答えて

1

nextを使用すると、ブロックから戻ることができます。あなたはしようとしているようにブロックの外で使うことはできません。

でも、タイムアウトエラーを救済すると自動的に次の行が繰り返されるため、nextは必要ありません。ちょうどrescueeach_line反復の中に移動する必要があります。

あなたのコードは次のようなものでなければなりません:あなたは `Enumerable`を反復するときの繰り返しに行くために` next`を使用することができます

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

関連する問題