确保URL参数命名的重要性是多少? ?user_id=3
或?uid=3
或?u=3
的{{1}}安全性是否较低?我真的应该考虑让参数难以猜测吗?
答案 0 :(得分:4)
根本不存在安全感。要考虑的唯一合理因素是链接的可读性/可爱性。如果你有200个字符的链接,它们就不会令人难忘,并且难以粘贴,并且占用大量空间(例如,无法通过短信发送,并且他们很难在手机上输入);另一方面,如果你能理解它的语义,那么对链接更有信心。
答案 1 :(得分:3)
userid应该是会话变量,会话ID应该在cookie中。
一些安全信息表示要避免所有URL变量,但这只是通过默默无闻的安全性。关键是,如果来自任何来源$_GET
,$_POST
,$_COOKIE
,$_SERVER
,$_REQUEST
,$_FILE
的用户。 ..你需要消毒它。由:
strip_tags()
[如果有一些允许的标签] htmlentities()
[首选] $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)
这是一个非常好的问题。老实说,我认为不需要 - 或者可以 - 真的很安全。 两者都有优势。例如
缩短,网址会很短。 (如果你动态地将网址放在一起,那么网址太长可能会有问题)
让它变长,以后更容易调试。 :)