如何使用$ _POST的HREF?

时间:2010-11-26 08:02:37

标签: php html post

我有一个HTML菜单,其中包含<a href="input&db=<some database>"等链接。有多个菜单项和多个数据库,因此我使用GET作为我的表单方法并在菜单项链接中使用它。

但是,它显示在浏览器的地址栏中(作为/ inout&amp; db = mydatabase)&amp;可能会引导用户开始猜测数据库名称。

如何使用$ _POST获得指向同一页面的链接列表,其中只有数据库不同?


编辑:哎呀,我的坏了,只有服务器端,所以没有JS

5 个答案:

答案 0 :(得分:3)

我认为使用链接通过帖子发送请求的唯一方法是使用JavaScript。但通过邮寄发送它根本不安全;任何人都可以安装FireBug来查看请求。

相反,我建议改变你的设计。数据库通常位于应用程序层次结构的底层,并且不需要将页面详细信息与数据库声音耦合。也许您应该尝试封装页面,以便他们不需要知道他们正在读取哪个数据库?

当然,我不知道你的应用程序的范围(你可能正在做像phpmyadmin这样的事情)。然后它可能是不可避免的,我只是建议所有用户的输入和权利的验证和成圣的通常组合。

或者您可以只加密数据库名称。我仍然希望改变设计。

答案 1 :(得分:3)

对于任何能够对此信息做任何事情的人来说,POST值都是显而易见的。除非你正在构建类似phpMyAdmin的东西,否则你永远不应该将这些内部信息传递给客户端。如果你在,伤害在哪里?你确实有适当的身份验证,不是吗?

答案 2 :(得分:2)

使用锚点的onclick事件提交隐藏的POST表单,或执行AJAX POST操作。

答案 3 :(得分:2)

没有。您可以应用一些简单且危险的解决方案:

  • 使用iframe:一切都会像以前一样工作,但实际地址不会出现在浏览器地址栏中。
  • 使用AJAX获取数据。
  • 使用表单提交按钮或javascript:链接替换链接。

这些都解决了“数据库名称出现在地址栏中”的问题,但是:

  • 任何拥有基本技术技能和适当工具(chrome,firebug)的人都可以通过查看发出的请求来确定数据库名称。
  • 不使用GET会弄乱浏览器的后退和刷新按钮,并阻止深层链接。

我的建议是继续使用当前的GET,但是为URL添加一个秘密令牌(例如HMAC(db_name,secret_key)),用户无法猜到但可以通过服务器轻松检查其有效性。这样,除非你给用户一个指向数据库的链接(同时包含数据库名称和秘密令牌),否则世界上所有的猜测都不会让他们访问它。

答案 4 :(得分:1)

GET或POST都不会隐藏您的数据库名称 即使您使用POST,查看源也会显示HTML。

首先,您不应公开您的数据库名称。

或者用一些模糊映射替换它

,例如

input&db=A
input&db=B

在内部,执行字符串匹配并将A转换为实际数据库名称