我有一个HTML菜单,其中包含<a href="input&db=<some database>"
等链接。有多个菜单项和多个数据库,因此我使用GET作为我的表单方法并在菜单项链接中使用它。
但是,它显示在浏览器的地址栏中(作为/ inout&amp; db = mydatabase)&amp;可能会引导用户开始猜测数据库名称。
如何使用$ _POST获得指向同一页面的链接列表,其中只有数据库不同?
答案 0 :(得分:3)
我认为使用链接通过帖子发送请求的唯一方法是使用JavaScript。但通过邮寄发送它根本不安全;任何人都可以安装FireBug来查看请求。
相反,我建议改变你的设计。数据库通常位于应用程序层次结构的底层,并且不需要将页面详细信息与数据库声音耦合。也许您应该尝试封装页面,以便他们不需要知道他们正在读取哪个数据库?
当然,我不知道你的应用程序的范围(你可能正在做像phpmyadmin这样的事情)。然后它可能是不可避免的,我只是建议所有用户的输入和权利的验证和成圣的通常组合。
或者您可以只加密数据库名称。我仍然希望改变设计。
答案 1 :(得分:3)
对于任何能够对此信息做任何事情的人来说,POST值都是显而易见的。除非你正在构建类似phpMyAdmin的东西,否则你永远不应该将这些内部信息传递给客户端。如果你在,伤害在哪里?你确实有适当的身份验证,不是吗?
答案 2 :(得分:2)
使用锚点的onclick
事件提交隐藏的POST表单,或执行AJAX POST操作。
答案 3 :(得分:2)
没有。您可以应用一些简单且危险的解决方案:
javascript:
链接替换链接。这些都解决了“数据库名称出现在地址栏中”的问题,但是:
我的建议是继续使用当前的GET,但是为URL添加一个秘密令牌(例如HMAC(db_name,secret_key)
),用户无法猜到但可以通过服务器轻松检查其有效性。这样,除非你给用户一个指向数据库的链接(同时包含数据库名称和秘密令牌),否则世界上所有的猜测都不会让他们访问它。
答案 4 :(得分:1)
GET或POST都不会隐藏您的数据库名称 即使您使用POST,查看源也会显示HTML。
首先,您不应公开您的数据库名称。
或者用一些模糊映射替换它
,例如
input&db=A
input&db=B
在内部,执行字符串匹配并将A
转换为实际数据库名称