PHP - 防止用户使用url GET变量

时间:2018-04-29 18:50:02

标签: php

我有以下网址

localhost/url/index.php?user_id=3

防止网站用户执行类似操作的最佳方法是什么?user_id = what,在这种情况下我真的不想使用POST出于某种原因

4 个答案:

答案 0 :(得分:2)

  1. 不要在没有某种排序的情况下直接将查询字符串参数($ _GET)发送到数据库中 消毒(建议:使用存储过程)。
  2. 使用某种授权来保护资源 用户无法访问。
  3. 显示一个不错的错误页面。

答案 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
}

您还可以使用正则表达式来防止用户输入错误。