2016-11-24 23 views
3

Я запускаю скрипт, который откроется на моем локальном хосте. Мой локальный сервер - это уязвимый набор тестовых приложений для веб-приложений.Как подтвердить всплывающее окно JavaScript с помощью Nokgiri или Mechanize

Я пытаюсь подтвердить всплывающее окно XSS из оповещения JavaScript. Например:

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

Nokogiri и Механизируйте, потому что он построен на вершине Nokogiri, можно разобрать 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 

Примечание: это не возможно с Nokogiri или Mechanize, чтобы сказать, если всплывающее произошло, как бы произойти в браузере, как это работает JavaScript. Ни Nokogiri, ни Mechanize не понимают и не интерпретируют JavaScript. Это может сделать только такой инструмент, как Watir или интерпретирующий JavaScript.

1

Определенно нет, и это потому, что ни Mechanize или Nokogiri запустить 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

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

  • Нет связанных вопросов^_^