我正在实施像Stackoverflow这样的投票系统。我怎样才能实现这一点,这是黑客证明?
我有一些PHP根据javascript解析后发送的ajax请求来完成数据库工作。是否会进行查询以检查用户的当前投票状态是否足以避免未经授权的投票?
答案 0 :(得分:7)
绝对有可能实施非常可靠的解决方案。但是必须在服务器端完成。
安全基本规则:您不信任客户数据。
将所有支票移至PHP并使您的javascript像
一样愚蠢$(".vote").click(function(e) {
$.post('/vote.php', vote_data, function(result) {
// update UI according to returned result
}
}
然而,仍然需要对客户端进行检查,但这是一种提高可用性(标记未填充的必填表单字段)或减少服务器负载(通过不发送明显不完整的数据)的方法。这些客户端检查是为了用户的舒适,而不是为了您的安全。
回答您的更新问题:
如果你存储了哪个用户投票选择哪个问题的完整日志,那么是的,很容易防止多次投票(当用户可以多次投票同一件事时)。当然,假设不允许匿名投票。
但是,如果你有一个受欢迎的网站,这个日志会变得非常大并且成为一个问题。有些系统试图通过禁用对旧文章的投票(以及删除相应的日志条目)来逃避。
如果有人故意试图破解我怎么办?
恶意用户可以执行不同类型的攻击。</ p>
CSRF (cross-site request forgery)
本文列出了一些防止攻击的方法。现代Ruby on Rails具有内置保护功能,默认情况下已启用。不知道PHP世界是怎么回事。
<强>点击劫持强>
这种攻击诱使用户点击他们认为不是的东西。例如,他们可能会点击“播放视频”,但网站会拦截此点击并在用户的墙上发帖。
网上也有一些文章。
答案 1 :(得分:0)
注意:这是对ORIGINAL QUESTION的回答。不要因为OP从根本上改变了他的问题而进行了投票。
这是一个巨大错误,甚至只是考虑依赖浏览器端组件来强制执行应用程序逻辑。在不受信任的环境中,应使用Javascript 专门用于演示目的。
所有应用程序逻辑都应该在服务器端实现,验证和实施。