同事使用以下代码片段从数据库获取URL,然后提交"虚拟"形成该URL。
$.ajax({
url: location.origin + location.pathname + "data/getURL.php",
method: "POST",
data: {
userName: user
},
success: function( data : any, textStatus : string, jqXHR : JQueryXHR){
console.log(data);
var url = (JSON.parse(data)).url;
if(url !== undefined && url !== null && url !== ""){
var sender : HTMLFormElement = document.createElement("form");
sender.setAttribute("action", `http://${url}/receive`);
sender.setAttribute("method", "POST");
var userSenderField = document.createElement("input");
userSenderField.setAttribute("type", "hidden");
userSenderField.setAttribute("name", "user");
userSenderField.setAttribute("value", user);
sender.appendChild(userSenderField);
var passSenderField = document.createElement("input");
passSenderField.setAttribute("type", "hidden");
passSenderField.setAttribute("name", "password");
passSenderField.setAttribute("value", password);
sender.appendChild(passSenderField);
document.body.appendChild(sender);
sender.submit();
使用Burp Suite或Chrome的开发工具,我可以看到getURL.php
的来电,但我无法看到http://url/receive
的来电。为什么呢?
答案 0 :(得分:0)
为了论证,让我们说你对data/getURL.php
的ajax调用成功了,但却传递了错误或意外的数据。
然后你最终进入你的ajax呼叫成功处理程序。
成功处理程序立即创建一个新表单,用(坏)数据填充它,然后提交表单。
这会导致回发。
Chrome的开发工具默认情况下会在回发时清除网络面板,同时清除对"data/getURL.php"
的呼叫,因此您实际上从未看到呼叫成功,并且无法在网络面板中看到它做了什么。 (因此,您不知道data/getURL.php
向您提供了错误的数据。
如果你在提交表单之前在ajax成功处理程序中放置一个断点,你实际上可以看到发生了什么。