什么时候可以故意模糊URL?

时间:2008-12-04 21:01:07

标签: friendly-url

拥有友好的URL通常是件好事。但是,有时候这似乎是一个坏主意。你的经验法则是什么?

例如,考虑我想要显示注册成功页面的情况。我希望所有的底层逻辑都是一样的。但是,根据他们的注册方式,我可能希望为在某种角色下注册的人显示不同的消息。

以下是"hackable"(如链接中所述)网址的一些袖手旁观的例子:

所有这些看起来都很糟糕,因为我不希望网址被发现。另一方面,我讨厌做一些更复杂的事情,只是稍微修改成功消息。

你会如何处理?

10 个答案:

答案 0 :(得分:22)

请记住,混淆网址是一种安全措施。你永远不应该相信外部输入 - 过滤,消毒和实施限制性逻辑。无论你多么聪明地相信你的混淆方案,人们都会相对轻松地破解更复杂的安全方​​案。

作为一般经验法则,没有充分的理由有意混淆网址。使用URL来传达读取操作(资源的路径)。使用POST请求来传递写入操作(添加/修改数据)。如果用户不应该通过URL执行某些操作,则应该通过请求方法对服务器端进行管理。

答案 1 :(得分:4)

您可以POST数据,或者,如果这不是一个选项,则在Session变量中设置值,然后读取成功页面中的值。使用Session的代码的实际复杂性与使用查询字符串大致相同。

答案 2 :(得分:2)

好的,如果你不认为这是一个安全问题,因为你只是在显示不同的消息,那你为什么要关心它是否可以被黑客攻击?

大多数用户都不会注意到网址是可编辑的,为什么要混淆? “精英黑客”会得到一个略有不同的信息,大不了。

一般的回答是,“我应该混淆......?” 。如果它的安全性,地狱没有,否则你为什么要混淆?最有可能的是,你在浪费时间。

答案 3 :(得分:1)

URL用于唯一引用内容。当内容是涉及多个对话步骤的过程的结果时,这些内容实际上不具有URL,因为URL不会重现该过程。

我会将它们转发给RegistrationSuccess.aspx,并根据会话状态显示内容。

如果有人在没有合适的会话状态的情况下访问该URL,我会在看了一条友好的消息后5秒钟将它们转发到头版,这些消息说明没有什么可看的。

还有一个更好的选择,可能是将它们转发给MyRegistration.aspx,这可能是他们喜欢的最爱。来自注册过程,它可能有一个框说明他们已成功注册。如果他们没有从注册过程到达那里,则不会显示此框。页面的其余部分是该用户之前所有注册过程的摘要。

答案 4 :(得分:0)

提交帖子?

如果您不想要URL中的信息,请不要将其放在URL中。

这并不总是那么容易......

答案 5 :(得分:0)

我想说,您希望搜索引擎轻松编入索引的网页使用网址路由。这包括高流量页面。

对于用户每月或每年只访问几次的其他页面,您可以将其保留为正常网址。

答案 6 :(得分:0)

如果必须绝对使用私有/个性化数据的URL,那么最好在服务器上生成随机唯一标识符并在URL中使用该标识符。有点像确认电子邮件,你必须点击一个链接。

否则,如果的任何其他方式在URL中包含数据,则不应该。如果注册成功,那么刚刚注册的人和您应该在当前会话中,或者您应该要求他们在看到自定义页面之前登录。

答案 7 :(得分:0)

为什么不将“注册成功”消息作为最后一步,而不是更改页面?

您可以使用Ajax或Server.Transfer()来执行此操作。

答案 8 :(得分:0)

我可以从引用网址的白名单中查看,这样他们就不能只输入不同的网址。这可能会消除路人的明显“黑客”。

(显然,如果你是个书呆子,你可以解决这个问题。)

答案 9 :(得分:-2)

你可以对查询字符串项进行某种校验和或散列,所以如果它们弄乱了URL,校验和就会失败并将它们踢到主页面。