关于POST方法安全性的问题

时间:2010-07-12 10:57:07

标签: html security

假设我有这样的帖子:

<form action="myApp/form_action.asp" method="post">
  First name: <input type="text" name="fname" /><br />
  Last name: <input type="text" name="lname" /><br />
  <input type="submit" value="Submit" />
</form>

所以,假设有一个非常糟糕的购买想要在我的应用程序中做一些事情。例如,我的form_action.asp不仅接受参数“fname”,“lname”,还接受“性别”,他/她可以自己提出请求,就像这样....

<form action="http://www.myDomain.com/myApp/form_action.asp" method="post">
  First name: <input type="text" name="fname" /><br />
  Last name: <input type="text" name="lname" /><br />
  Gender: <input type="text" name="gender" /><br />
  <input type="submit" value="Submit" />
</form>

****更新:**** 我不希望用户提交性别,因为我不想在他/她分配后修改他/她的性别。

如果他/她可以提交此查询,有什么方法可以避免他/她这样做?谢谢。

4 个答案:

答案 0 :(得分:2)

你正在以错误的方式思考这个问题。忘记HTML表单。它们不是您的服务器处理的。它处理HTTP请求。

而且(很明显)人们可以向您发送包含他们想要的任何内容的HTTP请求。不仅包括其他字段,还包含表单不允许的值的字段,或者名称长度为5000个字符的字段和/或那些长的值。

所以你绝对必须做的是定义什么构成有效输入和拒绝输入。在您的情况下,它非常简单:如果表单不应包含“性别”字段,则让服务器忽略此类字段,或者如果存在则中止错误。

通常您不必做任何事情来忽略字段。但是你必须以不接受无效字段值的方式编写应用程序。

答案 1 :(得分:1)

你无法避免这种情况。来自客户端的输入永远不会安全,并且总是可以被篡改。

您必须在ASP文件本身中实现检查服务器端。

答案 2 :(得分:0)

您无法避免的原因是他不需要制作自己的副本并从其他域提交。他可以使用javascript(例如:firebug)轻松实时修改您的网站,并将虚假请求相同发送给有效的

答案 3 :(得分:-1)

如果你的表单操作文件,即form_action.asp没有调用$ _POST ['gender']变量,我看不出它会如何影响你的脚本。

请确保您正在清理变量,因此对于名字和姓氏,您只想接受A-Za-z,空格以及连字符和撇号。

通过这样做,它们发送到您的表单并不重要,因为大多数标签,括号等将被删除,并且注入的任何脚本都不会运行。

请确保在将变量输入数据库之前也转义变量,我在php中使用mysql_real_escape_string,但不知道任何asp,所以你必须查找它。