【问题标题】:AJAX - how do I protect my ajax/php functions from being spammed?AJAX - 如何保护我的 ajax/php 函数不被垃圾邮件发送?
【发布时间】:2014-12-14 12:04:07
【问题描述】:

我目前正在重新设计我的网站 - 这是一个包含 2,000 多个 Flash 游戏的游戏厅。几年前我为我设计/创建了这个网站,我自己承担了它的现代化。 我遇到了一个我担心的特殊问题,过去该网站曾遭到黑客攻击,并且曾一度容易受到 mysql 注入的攻击,但此后已得到修复。 不过,问题出在这里——当前站点使用了过多的 PHP。我不喜欢这样,所以我想我会尝试通过在必要时使用 javascript 来减少很多服务器压力。例如,它经常需要从数据库中检索游戏列表。 我正在使用 Jquery 的 post() 函数将一组 id 传递给名为“get-games.php”的 php 有点像这样:

$.post( "ajax/get-games.php", { ids:ids } , function( data ) {
  //create games list with response data
});

有什么办法可以阻止有人用 500 个 id 反复恶意调用这个函数?有一个明显的答案 - 在 get-games.php 中添加如下内容:

if (ids.length > 100) throw an error

但有时我可能想检索超过 100 个游戏的列表,可能在管理面板上。这似乎有点限制,我想知道是否有更好的方法来处理这种垃圾邮件功能。

【问题讨论】:

  • 您可以实施每个 IP 的速率限制。
  • 您还可以为经常使用的请求实现缓存策略。以及对ids 数组的一些逻辑测试,例如最大长度。
  • @Barmar 你能推荐一些教程或代码示例吗?
  • 附带问题 - 对不同的 php 采取不同的操作是一种好习惯吗?因此,在上面的示例中,我使用了“ajax/get-games.php”——如果我有一个更通用的 php,它包含所有必要的函数,如“ajax.php”,可以为每个 ajax 请求提供服务,那会更有效吗?否则当 ajax 函数相互引用时,我无疑需要使用大量的“包含”。

标签: javascript php jquery mysql ajax


【解决方案1】:

没有灵丹妙药,遗憾的是,您可能必须实施一系列措施,在服务器端强制执行:

  • 各种速率限制(例如,每个 IP)(取决于您网站的使用模式)

  • 仅允许来自已知管理会话的小请求

  • 可能会锁定允许管理员会话的 IP

  • 如果站点的 UI 在操作 Y 之后仅允许操作 X,如果相关会话之前未在相关时间内执行操作 Y,则服务器端拒绝操作 X

...等等。 Stack Exchange 系统多年来一直在玩这类事情(非常成功),所以它可以做到,但你必须保持警惕并注意网站上的使用模式是否存在滥用行为,然后引入新的措施来减少这些滥用行为......

【讨论】:

  • 你能解释一下速率限制或任何教程
  • @IndraKumarS:我不知道任何教程,但速率限制的一般概念是只允许来自源 Y 的动作 X 在时间内 nt。这是一个例子:尝试在这个问题上发布两个 cmet,一个接一个。 SE 系统不会让您,它告诉您必须在 cmets 之间等待 15 秒(并重置计时器)。同样,删除 cmets 的速度也不能超过每五秒一个。这些是最简单的类型,但还有其他类型,比如不允许某人在 10 分钟内加载游戏 1 超过 5 次,诸如此类。
  • 这是一个很好的答案,我还会将缓存添加到列表中,因此可以在不碰到堆栈的情况下提供重复查询。
  • 如何最好地完成查询缓存?也许是会话变量?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 2013-05-01
  • 2011-12-04
  • 1970-01-01
  • 2017-02-09
  • 2012-09-04
相关资源
最近更新 更多