我已编辑我的任何旧问题,
这段代码是我写的。
<!DOCTYPE html>
<html>
<center><h1>csrf testing</h1 >
<form action="">
<input type="submit" onclick="" value="go">
</form>
<script>
var params = "email=nlkm&username=asc&csrf_token=&go=go";
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if (xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200 ){
var xhr2 = new XMLHttpRequest();
xhr2.open("POST", "useredit.php", false);
xhr2.setRequestHeader("Content-Type", "x-www-form-urlencoded");
xhr2.send(params);
}
};
xhr.open("GET", "useredit.php", false);
xhr.send();
</script>
</html>
现在的问题是,当我的第二个请求启动时,响应与第一个请求的响应相同。使困惑?好的,**我有一个提交一些参数和 csrf token 的表单。
现在,在该代码上,有两个请求**第一个是用户编辑页面上的 GET 请求,第二个是 POST 请求,该请求提交用户编辑页面上的表单以及表单的响应将在同一页面上产生结果。
现在,当我通过此代码提交表单而不提供 csrf token 时,响应与我对第一个请求的响应相同。 它应该响应 token 无效,但事实并非如此。
那么这里有什么问题呢?希望你现在明白了吗?
最佳答案
在查询字符串中添加引号。
$sql2 = "SELECT * FROM userinfo WHERE email ='".$_GET['userid']."'";
因此,如果 $_GET['userid'] == "someuser@example.com"
,则 $sql2
的值将为:
"SELECT * FROM userinfo WHERE email ='someuser@example.com'"
输入值用引号引起来。
在您的版本中,该值将是:
"SELECT * FROM userinfo WHERE email =someuser@example.com"
这是无效的 SQL。
关于javascript - Xhr 多个请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47368356/