我编辑了我的任何旧问题,
我已经写了这段代码。
<!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令牌的表单。
现在在那个代码上,有两个请求**第一个,是用户编辑页面上的GET请求,第二个是POST请求,它提交用户编辑页面上的表单和表单的响应将在同一页面上生成。
现在,当我通过此代码提交表单而不提供csrf令牌时,响应与我对第一个请求的响应相同。 它应该回应令牌无效但它没有。
那么这里有什么问题?希望你现在明白了吗?
答案 0 :(得分:0)
将引号放在查询字符串中。
$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。