【问题标题】:how to prevent parameter from url? [duplicate]如何防止来自url的参数? [复制]
【发布时间】:2016-06-17 19:13:02
【问题描述】:

我有这个示例网站

site.com/path/file.php

我想阻止用户添加file.php?id=file.php 之后的任何内容

我该怎么办?我想按原样请求此 url 并防止任何其他参数

我认为要做的是解析网址,但这对使用参数有帮助吗?

我的意思是如果解析器读取file.php?id 和请求的页面file.php?page=

【问题讨论】:

  • 你无法阻止它,但你可以忽略它或重定向无效请求。
  • 如果您不使用 GET 参数,那么是否有人添加它们并不重要。我敢肯定,很少有人会尝试将参数随机添加到 url。
  • 你可以在.htaccess做一个重定向。
  • 读到这个“是必要的”只会让我觉得你做错了什么。就像注册全局变量并且不希望人们注入 url 参数或使用 $_REQUEST 作为您的帖子参数。传递什么获取参数无关紧要,如果您能提出一个很好的理由,我会感到惊讶。你只使用你需要的,而忽略其余的。
  • 那么,如果它是“只是一个下载器”,为什么 get 参数很重要?删除它们或要求零参数不会增加任何保护。绝对为零。

标签: php


【解决方案1】:

您可以通过以下方式捕获 URL 中或发布的任何参数:

if (count($_GET)+count($_POST) > 0)
{
  <execute some error code>
  die('Ah, you cannot do that!');
}

【讨论】:

  • 这也太感谢了
【解决方案2】:

您可以尝试的一种方法是不使用同一页面来处理函数。使用 AJAX 请求并限制您指定的 Post PHP 页面,例如 "/include/processmyform.php" 或仅允许 AJAX 请求/仅允许来自您的 Web 服务器的 AJAX 请求。

define('IS_AJAX', isset($_SERVER['HTTP_X_REQUESTED_WITH']) &&  strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest');
if(!IS_AJAX) {
    #You can use this condition to ignore or block their request.
    die('That method is not allowed!');
} else {
    #If they did post AJAX, make sure it's a legitimate request from your server.
    $pos = strpos($_SERVER['HTTP_REFERER'],getenv('HTTP_HOST'));
    if($pos===false) {
        die('That method is not allowed!');
    } else {
        #All good - Cooking with hot grease!
        $id = htmlspecialchars($_POST['id']);
        $somevar = htmlspecialchars($_POST['someparam']);
    }
}

【讨论】:

    猜你喜欢
    • 2018-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-28
    • 1970-01-01
    • 2021-10-17
    相关资源
    最近更新 更多