将db表字段作为url参数传递的任何安全问题?

时间:2014-09-08 18:28:03

标签: php database

因此,用户收到一封电子邮件,其中包含刚刚放置的订单,并且他收到一个包含2个参数的链接以确认订单,而无需登录到应用程序。 该网址将包含订单ID和一个随机且唯一的确认密钥,在下订单时创建。例如

http://shop.com/confirm-order/12345/ksjdjJsjjJHDHHS2773mhhd

通过传递订单ID和确认密钥是否存在安全问题,因为用户不会登录,因此无法检查权限是什么?

我主要担心的是,如果攻击者开始随机重新创建参数,他是否可能会对尚未确认的订单进行猜测并错误地确认或者这些参数是否会帮助他攻击数据库?

谢谢

1 个答案:

答案 0 :(得分:0)

威胁不是因为您通过电子邮件赠送订单ID和随机生成的字符串。但是,当有人点击/或更好地使用该URL返回您的服务器时,关注的是您如何处理这项工作。

因此,您的代码如何处理随机产品ID和随机字符串(可能存在或不存在)是问题所在。根据您提供的信息,似乎没有任何真正的机会被黑客入侵。由于您没有赠送(输出)任何表名或数据库值,而是将URL(作为输入)并在内部进行处理。

您应该检查的是 - 确保来自您的服务器的ID和随机字符串(来自电子邮件点击或黑客的其他地方)确实是ID和随机字符串,而不是某些PHP或SQL代码。所以sanitize that input或使用htmlentities

但它仍然没有解决别人确认订单的问题。通过随机猜测,称为" brute-forcing"有人可以猜出ID和随机字符串的组合,这可能会意外地确认订单。
所以为了解决这个问题,我建议您使用以下解决方案 -

  • 要求用户登录。一个简单的登录不会让买家感到烦恼,如果您使用Facebook或谷歌登录,或者如果没有,那么#34;让我登录"特征
  • 如果您仍然热衷于跳过任何登录,请生成超过1个随机字符串,这将以指数方式减少某人猜测的机会。像http://example.com/order/12345?random1=blahblahblah&random2=blah2blah2