2016-11-24 5 views
3

自分のlocalhostで開くスクリプトを実行しています。私のローカルサーバーは、脆弱なWebアプリケーションテストスイートです。NokgiriまたはMechanizeを使用してJavaScriptポップアップを確認する方法

JavaScriptアラートからXSSポップアップを確認しようとしています。例:

http://127.0.0.1:65412/v?=0.2<script>alert("TEST");</script> 

MechanizeまたはNokogiriを使用してポップアップを確認する必要があります。 NokogiriやMechanizeでポップアップがあることを確認できますか?例えば

def page(site) 
    Nokogiri::HTML(RestClient.get(site)) 
end 

puts page('http://127.0.0.1:65412/v?=0.2<script>alert("TEST");</script>') 

答えて

2

鋸山を認識してないんだけど、それは鋸山の上に構築されているため、機械化、HTMLを解析することができますし、 <script>タグの内容を返します。その時点で、それはあなたが欲しいものを見つけるために、テキスト内で探す必要がありますので、タグの内容がテキストである:

require 'nokogiri' 

doc = Nokogiri::HTML(<<EOT) 
<html> 
<head> 
<script>alert("TEST");</script> 
</head> 
</html> 
EOT 

script_content = doc.at('script').content # => "alert(\"TEST\");" 

これは、サブ文字列がその時点で存在しているかどうかを確認するのは簡単です:

script_content['alert("TEST");'] # => "alert(\"TEST\");" 

か:

!!script_content['alert("TEST");'] # => true 

注:それはJavaScriptを実行しているが、ブラウザ内で起こるだろうとポップアップが発生した場合に伝えるために、鋸山、またはMechanizeのとはできません。 NokogiriやMechanizeはJavaScriptを理解したり解釈したりしません。 WatirのようなツールやJavaScriptを解釈するツールだけがそうすることができます。

1

絶対にありません、とMechanizeのか鋸山でもないが、Javascriptを実行するためです。

代わりにSeleniumを使用できます。このような

何か:

require 'selenium-webdriver' 

class AlertChecker 
    Driver = Selenium::WebDriver.for :firefox 
    def initialize(url) 
    Driver.navigate.to url 
    end 
    def raise_alert(text) 
    Driver.execute_script "alert('#{text}')" 
    self 
    end 
    def safely_get_alert 
    begin 
     Driver.switch_to.alert 
    rescue Selenium::WebDriver::Error::NoAlertOpenError 
    end 
    end 
end 

使用法:

alert_checker = AlertChecker.new("http://my.website") 

alert = alert_checker.safely_get_alert 
# => nil 

alert_checker.raise_alert("hack") 
alert = alert_checker.safely_get_alert 
puts alert.text 
# => 'hack' 

# As far as I'm aware Selenium doesn't have a built-in way 
# to tell you if it's an alert, confirm, or prompt. 
# But you know it's a prompt, for example, you could also send 
# keys before accepting or dismissing 
alert.accept 

alert = alert_checker.safely_get_alert 
# => nil 

アラートのセレンの取扱いといくつかのトリッキーなものががあります。

rescueまたはtryのようなものを使用せずに、コードがタイプ(プロンプト、確認、アラート)を検出する方法はありません。すべてはswitch_to.alertによって達成されます。

また、ブラウザにアラートが開いている場合は、アラートを処理しない限り、後続のコマンドを実行できません。アラートが開かれている間にnavigate.toを試してみてください。 の警告にはエラーが発生します。のアラートは処理されず、navigate.toコマンドを再実行する必要があります。このエラーが発生すると、アラートオブジェクトも失われます。

それは、このように制御構造として救助を使用するために少し魅力がないのですが、私は他のオプション

+0

これはどうでしょうか?htmlで見つける方法はありますか?同様に、解析するスクリプトタグがありますか? – papasmurf

+1

おそらく、XSSが発生するのを知るための最も簡単な方法は、Javascriptを実行することです(Nokogiri/Mechanizeを使用することはできません)。 –

+0

ええ、これは簡単だとは思わなかった – papasmurf

関連する問題