URL参数的最佳实践

时间:2014-03-28 02:31:07

标签: php

确保URL参数命名的重要性是多少? ?user_id=3?uid=3?u=3的{​​{1}}安全性是否较低?我真的应该考虑让参数难以猜测吗?

4 个答案:

答案 0 :(得分:4)

根本不存在安全感。要考虑的唯一合理因素是链接的可读性/可爱性。如果你有200个字符的链接,它们就不会令人难忘,并且难以粘贴,并且占用大量空间(例如,无法通过短信发送,并且他们很难在手机上输入);另一方面,如果你能理解它的语义,那么对链接更有信心。

答案 1 :(得分:3)

userid应该是会话变量,会话ID应该在cookie中。

一些安全信息表示要避免所有URL变量,但这只是通过默默无闻的安全性。关键是,如果来自任何来源$_GET$_POST$_COOKIE$_SERVER$_REQUEST$_FILE的用户。 ..你需要消毒它。由:

  • 尽可能使用白名单
  • 使用RegEx并在使用之前键入检查所有输入
  • 如果显示,请删除HTML
    • 使用strip_tags() [如果有一些允许的标签]
    • htmlentities() [首选]
  • 为所有数据库查询使用预准备语句(mysqli或PDO是可以为MySQL数据库执行预处理语句的公共库)以防止SQL注入
  • 使用nounce来防止XSFR攻击和意外重新提交
  • 如果它的文件在移动之前检查mime类型(不仅仅是$FILE数组中的mime类型)

TL; DR:使用mod_rewrite是隐藏变量的真实姓名可能不是一个糟糕的主意,并且可能会让你的网址变得更漂亮"对用户而言 - 但这不是一个巨大的安全收益。

答案 2 :(得分:1)

总的来说,我发现对实施的考虑至关重要。这会被你和几个朋友使用吗?在这种情况下,担心您为URL变量命名的内容可能不太重要。

如果数据非常敏感,请不要将其放在网址中 - 这包括特定于用户的信息,例如密码(无论如何都不应该以纯文本形式提供),密码哈希,电子邮件地址,私人信息等。我不太担心用户名。如果信息是重要/敏感的,请发布它而不是GET。

将.htaccess与一些rewriteRules一起使用可以使URL更容易记住 - 例如,website.com / page/1比website.com?page=1更加用户友好,特别是当你获得超过1时变量在那里。 .htaccess rewriterules并不难做,可以帮助您的网站看起来更专业。

就网址中的变量NAMES而言,它又取决于使用情况。例如," user = username"会很好,甚至"你= uname"或者" uid =用户名"是可以接受的,但是如果你担心用户可能很容易找到并改变某些东西,那么这就是一个很大的问题:这不是因为用户可以在那里改变一些东西,(即使POST不是&#39) ; t安全,用户可以POST任何他们想要的东西),但因为你的后端应该被构建来处理它,即使你的用户在POST / GET中改变了东西。

TL; DR:将GET变量放在URL栏中是对用户的礼貌。如果他们会欣赏或使用它,那就去做吧 - 这很不错。用户不希望您将敏感信息放在那里,用户也不希望它过长。任何和所有安全性都应该在后端完成,用户可以在其中篡改它。

答案 3 :(得分:0)

这是一个非常好的问题。老实说,我认为不需要 - 或者可以 - 真的很安全。 两者都有优势。例如

  • 缩短,网址会很短。 (如果你动态地将网址放在一起,那么网址太长可能会有问题)

  • 让它变长,以后更容易调试。 :)