PHP写的API如何防止拒绝服务攻击?

WBOY
Freigeben: 2016-07-21 12:01:29
Original
1199 Leute haben es durchsucht

现在很多公司都是用PHP写API来对接前端的web/iOS/Android,云和端是完全分离的,无法做到动态协商。如果双方都协定一个静态KEY,那么在web的js中是透明的,就算是ios/android也很容易通过截包或反编译获得这个KEY。
现在一般的云服务能接受的最大并发也几千,如果被拒绝服务攻击给占满势必会影响正常用户的访问。尤其是用类似websocket这样的通信协议,一旦建立了连接就会一直占着坑,随便写一段简单的多线模拟连接来骚扰一下,服务器就基本摊了。
请问如何在PHP端适当的防止此类攻击?不必太极致,把瘫痪控制在10分钟内一般的小型应用应该还是可以接受的。

回复内容:

其实题主说的问题 普遍存在 从两方面可以说下

代码方面:
程序员的经验吧 。一般就是代码方面黑白名单 其次就是接口超时的处理 剩下的就是一些规范。其实没有什么特别好的经验 。更多来说 一般的小黑客也不会直接DDOS你 。要是真的DDOS 你 这些基本也够了。 更多是日常维护的对数据异常的处理。

其实 你不用担心被恶意攻击。接口这东西 说白了 也是POST GET 。只要你在处理接口数据时候过滤 保证数据的安全性 一般的漏洞是可以防住的 。 一般的三流黑客基本都会挡在这个门口。 除非你网站很出名 那你可以找安全公司做下测试 。基本也就OK 应对DDoS攻击,更多的是系统层面的防护,PHP写的API接口一般是业务上的,业务上的PHP能做的就是不要挂,做到尽量快的响应
另外考虑到机器负载能力,基本上这类问题就需要用到流量控制,限定一个终端对于某个API一段时间内访问次数 1.认证接口接收一个客户端时间和一个签名。首先验证客户端时间与服务器时间在一定误差范围内(比如±5分钟,误差范围越大越不安全),然后验证签名是否一致(签名算法必须使用客户端时间),成功后返回一个token和一个随机字符串。
2.除认证接口之外的所有接口必须接收token和一个签名。首先检查token是否合法,然后验证签名是否一致(签名算法必须使用认证接口返回的随机字符串)。
3.所有接口做策略:
1) 验签失败一定次数(1次,2次,3次,越大越不安全),屏蔽ip。
2) 单ip调用超限(最好根据业务需要,针对每个接口做不同的限制。比如登录,可以要求5次/天),屏蔽ip。 ip白名单 太频繁的就封IP呗 不用这么麻烦,使用iptables
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage