Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 防止用户通过URL?foo=bar操纵站点数据_Php - Fatal编程技术网

Php 防止用户通过URL?foo=bar操纵站点数据

Php 防止用户通过URL?foo=bar操纵站点数据,php,Php,我的注册后端php将用户重定向到前端,如下所示: header('Location:registrationView.php?warning='.urlencode($error)); 在前端,我回显我的变量,该变量告诉用户完全填写注册表,如下所示: if ($_GET) { echo htmlspecialchars($_GET["warning"]); } 如果用户决定手动更改URL(现在看起来像http://localhost/registrationView.php?warn

我的注册后端php将用户重定向到前端,如下所示:

header('Location:registrationView.php?warning='.urlencode($error));
在前端,我回显我的变量,该变量告诉用户完全填写注册表,如下所示:

if ($_GET)
{
    echo htmlspecialchars($_GET["warning"]);
}
如果用户决定手动更改URL(现在看起来像
http://localhost/registrationView.php?warning=Fill+填写+表格
,如:

http://localhost/registrationView.php?blahblah 

当然,他要么得到一个错误,要么把网站上显示的文字改成“blahblah”


有没有办法防止这种URL操纵,或者有没有更好的办法从后端返回警告消息?

我喜欢使用会话来代替错误

如果要返回错误,我通常会执行以下操作

    $_SESSION["error"] = "my error text.";
我通常会在他们做了某件事之后把他们发送到成功页面

在成功页面的顶部,我放置了类似这样的内容,以将它们重定向回原始页面

    if (!empty($_SESSION["error"])){
        header('Location: original_page.php');
    }
然后,在原始页面中,我放置了类似这样的内容

    if (!empty($_SESSION["error"])){
        echo $_SESSION["error"];
        $_SESSION["error"] = null ;
        unset($_SESSION["error"]);
    }
通过这种方式,他们可以显示错误,如果他们开始尝试键入随机的内容,则无法执行任何代码


我从不使用$\u GET来处理任何可能被操纵的事情。

flash消息是一种很好的模式。基本概念是将消息存储在会话中,并在消息显示后将其清除。是的,会话对这类事情很有好处。我猜$\u POST和$\u会话中的所有内容都可以操作。特别是当你谈论开发人员时。我看到会话对解决我的问题很有用,但是如果你必须使用get作为书签或者刷新页面,那该怎么说呢?除此之外,我认为会话在任何方面都比get好如果你使用get作为书签,那么你本质上说你不在乎别人是否输入了这个url。例如,mysite.com/index.php?page=blog如果你想让他们能够预订它,谁会在乎他们是否输入了它?这与输入基本相同。但是,如果您想阻止他们在mysite.com/index.php?page=admin中执行类似于typicn的操作,只需在您的管理页面中添加一个函数,检查登录的用户是否确实是管理员。那么有没有办法将数据发送回前端而不必进行操作?使用AJAX怎么样?您可以随时阻止他们操纵服务器上的数据。但这个问题应该自行解决。你的网站的目的是什么?比如说你卖鞋。如果您有一个用户试图破坏您的网站,并在GET字段中键入随机内容。他们可能不是想从你那里买鞋。谁在乎他们会不会毁了自己的经历?只要他们不为别人毁了它。正确使用您网站的用户通常不会在URL栏中键入内容。所以,你可以确保你的网站结构良好,这样他们就不会“意外”这样做。
    if (!empty($_SESSION["error"])){
        echo $_SESSION["error"];
        $_SESSION["error"] = null ;
        unset($_SESSION["error"]);
    }