我有以下网址
localhost/url/index.php?user_id=3
防止网站用户执行类似操作的最佳方法是什么?user_id = what,在这种情况下我真的不想使用POST出于某种原因
答案 0 :(得分:2)
答案 1 :(得分:0)
在这种情况下,您可以使用:
$_COOKIE['user_id'] = 10
或
$_SESSION['user_id'] = 10
在我看来,Session会更好,因为你可以在他们的每个会话之后注销它们,正如@mehdi所说,它不能由用户编辑,不像cookie。
要使用会话,您需要在每个文件前面session_start();
答案 2 :(得分:0)
除了已提到的所有内容之外,由于您正在构建正确的查询字符串等,因此请包含某种哈希值,该哈希值是所有数据位的哈希值。将数据作为cookie存储在客户端计算机上时同样适用...
当您收到GET(或读取cookie)时,使用其中的数据重新计算哈希值,如果数据不再验证哈希检查,则停止/重定向/错误输出。执行此操作时,请使用一些未在URL或网页源中显示的服务器端盐。
$user=3;
$urlGet="?userid=".$user."&uuid=".sha1($user."salt");
print("<a href='/index.php".$urlGet."'>click</a>");
然后点击链接...
if(sha1($_GET['userid']."salt")!==$_GET['uuid']){
header("location: /index.php");
exit'
}
答案 3 :(得分:-1)
您有两个主要选择。
1)将您期望的值列入白名单,例如
$age = $_GET["Age"];
if($age <= 0 && > = 120){
// Drop the request or return a HTTP status code
}
2)将您不期望的某些字符,单词或短语列入黑名单。
$message = $_GET["Message"];
if(stripos($message, "bad-word") > 0){
// Drop the request or return a HTTP status code
}
您还可以使用正则表达式来防止用户输入错误。