问题描述
|
我有使用
mysql_fetch_array()
提取的行列表。现在,我已经创建了这些值的超链接,但是问题是我不想通过超链接发送ID。也就是说,如果单击项目OnList,它将导航到“ 1”,但是值将通过隐藏变量发送。
有什么办法吗?如果没有,如何通过地址栏发送值,以使查看器不编辑值?这个ID是用户未编辑的...
解决方法
基本上,您想要a。)混淆ID或b。)限制用户可以查看的ID。
为了实现前者,您可以为数据库中的每个条目生成一个随机散列,该散列比id长得多并且很难猜测(
hash(\'sha512\',time() + $row[\'id\'])
)。然后,您可以使用这些唯一的哈希代替链接中的ID。
另一种方法在很大程度上取决于您的应用程序:您可以跟踪在会话中提供给用户的ID,如果该ID不在他的列表中,则可以拒绝该页面请求(发送HTTP 403响应)。但是,攻击者可能会首先调用其他页面(如果在您的应用程序中可能如此),以在其会话中填充此链接列表。
无论哪种方式,都不能保证成功,但是可以使攻击更加困难。
确保达到目标的唯一方法是强制用户登录并确定谁可以看到每个用户的对象(同样,如果在应用程序中可以这样做)。
, 为了使这个更难一点,您可以对ID进行加密,并在将其从view.php中获取后解密,这样就很难预测和弄乱了。例如类似youtube视频网址的内容
, 没有办法。
我的意思是,仅必须发送ID或某个唯一值来告诉服务器您在请求什么。那是简单的逻辑。
但是,要使“更改值”更加困难,可以使用AJAX。使用ID的请求仍会发送,但是在后台,普通用户不会注意到任何事情。
当心,只有一点技术知识的人就能调查请求,而这仅通过使用Firebug或其他开发工具即可完成,所以您还是不好。
如果您认为可以从这种事情中受益,请相信我,您不会。如果这是您的意图,那么这不是处理安全性的方法。