我正在实现一个类似Stackoverflow的投票系统,我该如何实现它才能防止黑客攻击呢?
我有一些PHP,它可以根据javascript解析后发送的ajax请求来执行数据库工作。执行查询来检查用户的当前投票状态是否足以避免未经授权的投票?
发布于 2011-12-22 19:38:33
实现相当可靠的解决方案是绝对可能的。但是这个必须在服务器端完成。
安全的基本规则:您不信任客户端数据。
把你所有的检查都移到PHP上,让你的javascript变得像
$(".vote").click(function(e) {
$.post('/vote.php', vote_data, function(result) {
// update UI according to returned result
}
}然而,这是一件常见的事情,仍然在客户端进行检查,但作为一种提高可用性(标记未填充的必填表单域)或减少服务器负载(通过不发送明显不完整的数据)的方式。这些客户端检查是为了用户的舒适度,而不是为了您的安全。
回答您更新的问题
如果你存储了用户投票给哪个问题的完整日志,那么是的,很容易防止多次投票(当用户可以多次投票支持同一问题时)。当然,假设匿名投票是不允许的。
但是如果你有一个受欢迎的网站,这个日志可能会变得很大,并成为一个问题。一些系统试图通过禁用对旧文章的投票(并删除相应的日志条目)来逃脱。
如果有人故意攻击我怎么办?
恶意用户可以执行不同类型的攻击。
CSRF (cross-site request forgery)
文章列举了一些防止攻击的方法。现代Ruby on Rails具有内置保护功能,默认情况下处于启用状态。不知道在PHP世界里是怎么回事。
Clickjacking
这种攻击会诱使用户点击一些不是他们所想的东西。例如,他们可能会点击“播放视频”,但网站会截获这种点击,并将其发布到用户的墙上。
网上也有一些文章。
发布于 2011-12-22 19:36:10
注意:这是对 的回答
不要因为操作员从根本上改变了他的问题就否决它。
这是一个巨大的错误,,即使仅仅是考虑依赖浏览器端组件来执行应用程序逻辑。在不受信任的环境中,应该只使用来表示。
所有应用程序逻辑都应该在服务器端实现、验证和执行。
https://stackoverflow.com/questions/8603285
复制相似问题