【问题标题】:PHP $_GET leaves me url addon - how to get rid of it?PHP $_GET 给我留下了 url 插件 - 如何摆脱它?
【发布时间】:2012-09-11 12:48:31
【问题描述】:

按下按钮时:

<form action="index.php" method="get">
  <input type="hidden" name="act" value="run">
  <input type="submit" value="Truncate map">
</form>

if (!empty($_GET['act'])) {
  mysql_query("TRUNCATE TABLE mapinfo");
} 

它将我重定向到index.php?act=run

我想摆脱它所以添加:header("Refresh: 0; url=$page");:

if (!empty($_GET['act'])) {
  mysql_query("TRUNCATE TABLE mapinfo");
  $page = $_SERVER['PHP_SELF'];
  header("Refresh: 0; url=$page");
} 

但它首先加载 index.php?act=run,而不是将浏览器重定向到 index.php,这会刷新 2 次页面。

如何做到最好?

【问题讨论】:

  • 您需要显示表单本身的代码。
  • 按您的要求添加了表单代码。
  • 让用户仅使用 GET 请求来清除表是一个非常糟糕的主意。最好只操作数据。
  • 它只是为了我,厌倦了只操作数据
  • 这很公平,但即便如此,您可能有一天会单击刷新并丢失一周的数据...使其明确并使用“您确定吗?”进行验证提交请求前提醒..

标签: php redirect get refresh


【解决方案1】:

不要使用刷新标题,而是使用

header("Location: $page");

【讨论】:

    【解决方案2】:

    除了使用此脚本存在一些主要安全问题之外,为什么不使用以下内容:

    <form action="index.php" method="post">
      <input type="hidden" name="act" value="run">
      <input type="submit" value="Truncate map">
    </form>
    
    if (!empty($_POST['act'])) {
        mysql_query("TRUNCATE TABLE mapinfo");
    }
    

    这将执行 POST 请求而不是 GET 请求。但是,请注意,您仍然应该在 POST 请求 (Post/Redirect/Get) 之后重定向用户。不过,请求参数是隐藏的。

    注意不要在生产环境中使用这类脚本,它们很不安全!

    【讨论】:

    • @Lee:您绝对关于安全性是正确的,POST 请求不安全;但请注意,它根本不是为了安全而设计的,它旨在回答 user1656447 的问题。
    • @user1656447 如果我知道您的网络服务器的 URL/地址,我可以导航到 ....com/index.php?act=run 并删除您服务器上的整个数据库。据我在您的代码中看到,如果请求来自您自己的服务器,或者我什至有足够的权限执行此类操作,则没有验证。
    • 这是为了我的生产力,它是为了本地主机,这个数据库每隔几分钟就会被截断一次。无论如何,我可以向您展示 echo 而不是 TRUNCATE 以避免这种混乱
    【解决方案3】:

    这确实是最好的方法。您可以取消设置 $_GET['act'] 变量,这样它就不会影响控制流的其余部分,或者只是像正常一样渲染页面的其余部分(即您不需要重定向,只需像渲染页面的其余部分一样$_GET['act'] 变量从未设置)。

    【讨论】:

    • -1 URL 将是一样的。如果您在浏览器中单击“返回”,您将再次截断表格
    • 在这种情况下我没有想到这一点。无论如何,将破坏性操作作为$_GET 请求是一个非常非常非常的坏主意......
    猜你喜欢
    • 1970-01-01
    • 2017-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 2015-09-28
    相关资源
    最近更新 更多