html链接参数或表单POST参数作为隐藏字段 - 安全和否则

时间:2017-11-06 01:31:05

标签: html forms security post hyperlink

我有一个用php(PDO)和MySQL编写的简单联系人数据库应用程序。它是一个带有switch case语句的单个文件。默认显示联系人表,大小写:添加,编辑,删除等功能。所有MySQL语句都是PDO中的预处理语句。

我的问题是: 使用带参数的html链接移动是否更好?或者使用带有参数作为隐藏字段的POST表单更好。

e.g。在列出联系人的表格中,每行内最好有一个链接:

<a href="?mode=edit&contact_id=321">edit</a>

并获取交换机的'mode'和$ _GET语句中的参数

或者是否更好:

<form method="POST" action="">
  <input type="hidden" name="mode" value="edit"/>
  <input type="hidden" name="contact_id" value="321" />
  <input type="submit" name="submit" value="edit" />
</form>

我感兴趣的是从安全的角度以及功能的角度来看。我在这里找了类似的问题,发现只有一个答案说一个表格更好。它没有任何解释和4个赞成。

任何信息都将不胜感激。 欢呼声。

1 个答案:

答案 0 :(得分:1)

与表单一起使用肯定更好。为什么?好吧,网址导航将通过 GET 请求提交,而<form>提交则通过 POST 处理。 GET个请求 exposed to the end-user ,而POST请求则不是。{strong> go ahead 。正如TeamTreeHouse在上一个链接中所述:

  

处理敏感数据时使用POST。

考虑一下你以前的做法。用户看到index.php?mode=edit&contact_id=321出现在他们的浏览器中。如果它们是恶意的,他们很容易就能与index.php?mode=edit&contact_id=1建立关联。他们可以在浏览器中轻松输入。假设您没有设置任何其他身份验证机制,他们就可以 browser addons 并修改其他人的帐户。

后者稍微更好。虽然源代码不像公开的URL那么明显,但任何人仍然可以查看它,并找到隐藏的321联系人。您可能认为恶意用户无法使用查询字符串编辑 hidden表单字段,但事实并非如此。他们可以下载并创建自己的副本,只需用您自己的action参数替换,从而提交篡改数据。甚至还有 authentication token ,让它变得更加容易!

要解决此问题,您需要将<form>方法与here结合起来。生成用于验证表单完整性的标记,确保在生成表单后不会对其进行操作。这取决于您在后端使用哪种语言来确定如何生成令牌,但对于JSON网络令牌 OWASP's article 来说,这是一篇很棒的文章。

提交表单后,检查令牌是否与生成时的令牌相匹配。如果它匹配,一切都很好,所以你继续。如果它没有,表单已经被操纵,所以你拒绝提交。

有关详细信息,建议您查看跨站请求伪造的 {{3}}

希望这有帮助! :)