【问题标题】:How to repair a modified address bar with php如何用php修复修改过的地址栏
【发布时间】:2013-04-22 20:47:30
【问题描述】:

PHP 新手,我正试图让我的网站防篡改。如果有人在浏览器地址栏中修改了 url,我想重新加载页面 url。我想到的一种方法是将页面 url 存储在会话变量中,以便在需要时重复使用。
下一页 url 来自基于用户选择的 SQL 查询(可能有几十个),所以我事先不知道该 url 是什么。我想做的是恢复当用户单击链接时传输到服务器的地址(当您将鼠标悬停在链接上时,Firefox 在左下角显示的地址)并将其存储在会话变量中. 这可能吗?如果可以,我该如何用 PHP 恢复它?

【问题讨论】:

  • 这听起来很糟糕。
  • 如果我正确理解您的问题,该值已存储在 $_SERVER 数组中。
  • Erm... 这不是一种非常复杂的说法:我想将用户重定向回上一页吗? (如果不是:请参阅 Matthews 的回答...)。
  • 谢谢大家。我没有很好地解释自己。我想要做的是,如果我在地址栏中有 ?a=b&b=c 并且用户将其更改为 ?x=y&y=z 并按 Enter,我的代码将恢复地址 ?a=b&b=c 从而给出同一页面的无缝显示 - 不会跳转到错误页面,例如“抱歉,但找不到您请求的页面。也许搜索会有所帮助。” @jerry :)
    在我看来 $_SERVER 数组包含上次刷新后页面的 url 并且最后一次刷新是由顽皮的用户在修改地址栏后进行的......

标签: php url address-bar tampering


【解决方案1】:

您确实不需要多个 URL。您可以在整个页面序列中使用相同的 URL,因为服务器知道下一步该做什么。

了解“有限状态机”以及它们如何帮助您创建一个工作流,根据您为用户提供的选择,该工作流只允许非常有限的一组操作。您很可能需要为此进行会话。

如果操作正确,用户将无法篡改 URL,因为所有其他 URL 都会导致 404 或其他错误,并且只有在所需步骤位于允许的步骤 - 否则不会有任何变化。

举例说明:

第一个状态是“开始”,允许的转换是“答案 1”和“答案 2”。这些正在过渡到两个结束状态,没有进一步的过渡。因此,每当用户进入“已回答 1”状态时,他就无法进入其他状态,除了创建一个新会话,如果机器状态不与会话绑定,也可以禁止该会话,而是用户帐户。

【讨论】:

    猜你喜欢
    • 2012-03-06
    • 1970-01-01
    • 2017-05-31
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 2018-10-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多