【问题标题】:Re-writing URL parameters重写 URL 参数
【发布时间】:2011-12-15 11:41:48
【问题描述】:

所以我有一个脚本(用 PHP 编写)发布用户输入的参考号和邮政编码,然后将用户重定向到具有如下 URL 参数的页面:

http://mydomain.com/data.php?reference=REF1234&postcode=LE1FEH

data.php 脚本将根据 URL 参数从数据库中获取数据,现在我想隐藏用户视图中的参数 - 既可以防止 SQL 注入,也可以使 URL 更简单。我不想直接在 URL 中隐藏输入的数据。 Apple 似乎是我现在唯一能找到这样做的人 - 在他们的 URL 中,您可以看到订单号和邮政编码,但没有等号或任何东西,如下所示:

https://store.apple.com/uk/order/guest/ordernumber/postcode

有没有办法这样做?

(我不确定您是否会将其归类为加密或其他什么,所以我很难找到任何有用的文章以及措辞得当 - 如果有点令人困惑,我很抱歉)

【问题讨论】:

  • URL 重写。搜索该词,您会立即找到所需的内容。
  • @user1013930:此外,您可以将表单设置为 method="POST" 以“隐藏”用户的 URL,但任何使用 FireBug 的人都可以编辑 HTML 并向您发送注入负载.无论您做什么,您唯一的选择就是清理用户的输入。时期。永远不要相信他们!
  • 表单的方法实际上是 POST 但是我将用户从表单发送到页面,如下所示: header('Location: data.php?reference='.$reference'&postcode='.$postcode );所以我真的不明白你说它“隐藏”网址是什么意思?

标签: php .htaccess url url-rewriting query-string


【解决方案1】:

请使用.htaccess

Options +FollowSymLinks  
RewriteEngine on    
RewriteRule ^([a-z0-9A-Z]+)/([a-z0-9A-Z]+)$ ./data.php?reference=$1&postcode=$2 [NC]

您的 URL http://mydomain.com/REF1234/LE1FEH 将被视为http://mydomain.com/data.php?reference=REF1234&postcode=LE1FEH,您可以通过 GET 方法获取值。

了解更多info

【讨论】:

    【解决方案2】:

    您需要使用.htaccessmod_rewrite 来执行此操作。但是请记住,它与“普通” URL 一样容易受到 SQL 注入的影响,并且更容易在最微小的故障时出现内部服务器错误。我个人建议不要使用这种方法,除非用户可能希望轻松共享 URL,但无论您选择做什么,请确保始终防止注入。

    【讨论】:

    • 请注意,这是特定于 Apache 的。其他 Web 服务器通常有 URL 重写选项。此外,您不需要使用.htaccess。事实上,在你的服务器配置中放置重写规则更可取
    猜你喜欢
    • 1970-01-01
    • 2013-08-12
    • 2018-10-29
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多