因此,如果不使用SSL,就不可能安全地执行AJAX请求。我知道了。您可以查看源代码通过Javascript发送的数据,也可以通过欺骗标题直接访问PHP页面,yada yada。
但是,假设这个网络应用并不特别需要真正的安全性,相反,它只是一种让大多数逆向工程师无法接受的游戏。我应该采用什么样的障碍?
我不是在寻找加密算法的一些荒谬的过度Javascript实现。我想要简单和温和的安全......如果这不是天生的矛盾。那么,你们会推荐什么?
例如,我正在进行一场比赛,如果用户成功点击图像(jQuery),它会将用户ID和时间戳传递给PHP页面,MD5都会被随机数据腌制,然后用MIME编码。然后,PHP页面验证此用户ID和时间戳,然后以另一个盐渍MD5哈希的形式返回获胜的“代码”。我还使用多个标头检查来帮助确保请求来自有效位置。我错过了什么,或者是我能做的一切?看起来有人可能只是点击jQuery点击事件并破坏整个事情,但我不知道如何阻止它。
我会给那些想出一个巧妙的人造安全机制的人一个答案!或者......只是谁告诉我为什么这次我很蠢。
答案 0 :(得分:1)
我认为标题检查很容易被愚弄。虽然没有受伤。
由于您的算法在客户端公开,因此用户可以使用自动脚本将适当的数据发送到您的服务器,以欺骗您的服务器以为它被点击了。
除此之外,您还必须注意会话劫持。用户实际上可以代表其他人提交此ajax请求,特别是如果他们有算法。您的应用程序对某些用户有不同的行为吗?如果是这样,那么会话劫持可能会变成特权升级问题。
在您的情况下,为了构建安全的应用程序,您不一定需要使用SSL加密有效负载。根据您的描述,没有敏感数据通过网络发送。
确保您在服务器端进行了一些基本的愚蠢检查,以检查自动或恶意行为。例如,如果您发现标题信息丢失,您可能希望有某种标记/警报,有人正在使用响应。您可能想要做的另一个地方是请求模式。
更安全的模型是让服务器为用户分配一些他们无法进行逆向工程的会话令牌。理想情况下,此会话令牌应以时间戳而不是用户名开头,以提升盐渍哈希算法的雪崩效应。
由于您的应用程序似乎处理奖品和可能的资金,我会投入更多时间来保护此应用程序。希望这些技巧对你有帮助。