WordPress(PHP)防御CC攻击代码

攻击者借助代理服务器生成指向受害主机的合法请求,实现DOS,和伪装就叫:cc(ChallengeCollapsar)。这种攻击模式已经算是老技术了,甚至不能称之为一门技术。 但是在现在,还是有许许多多的主机抵抗不了CC的骚扰。

可以说CC攻击的适用性和破坏性不比DDOS的差,经过了这几天的实验,发现了许多政府相关部门的网站都支持不住CC的攻击,更别说我们许许多多的Wordpress用户了。 WordPress以功能强大,扩展性强称霸博客界,但是殊不知在功能强大的背后更显脆弱,原来写过一篇文章是WordPress, Blog or CMS?,其中提到Wordpress的强大足以作为一个CMS大型网站,但是现在看来要用Wordpress做大型网站还得做些防范措施了。

一个反应时间到进入时间在1秒内的网站一旦被CC攻击可以在几秒内反应加至20秒以上,甚至拒绝服务。是不是听起来很骇人? 下面说说PHP大型网站如何判断是否为CC攻击(代理访问), 其原理就是拒绝代理访问。 这样会拦截一小部分的访客,但是为了那一大部分的访客,这何足挂齿呢?

代码如下:

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. <?
  2. //Ban Proxy for all soft.
  3. $ipinfo = new IpInfo();
  4. $ipinfo->banProxy(true);
  5. //false 时,屏蔽超级匿名的代理
  6. class IpInfo
  7. {
  8. // (c) KINPOO
  9. var $clientIp;
  10. var $proxy;
  11. var $proxyIp;
  12. function IpInfo()
  13. {
  14. $this->getIp();
  15. $this->checkProxy();
  16. }
  17. function banProxy($banAll = true)
  18. {
  19. if (!$this->proxy)
  20. {
  21. return;
  22. }
  23. if ($banAll == true)
  24. {
  25. die(‘Forbidden:Proxy Connection’);
  26. }
  27. else
  28. {
  29. if ($this->clientIp == $this->proxyIp)
  30. {
  31. die(‘Forbidden:High Anonymous Proxy Connection’);
  32. }
  33. }
  34. }
  35. function checkProxy()
  36. {
  37. if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])
  38. || isset($_SERVER['HTTP_VIA'])
  39. || isset($_SERVER['HTTP_PROXY_CONNECTION'])
  40. || isset($_SERVER['HTTP_USER_AGENT_VIA'])
  41. || isset($_SERVER['HTTP_CACHE_CONTROL'])
  42. || isset($_SERVER['HTTP_CACHE_INFO']))
  43. {
  44. $this->proxy = true;
  45. $this->proxyIp = preg_replace(“/^([{0-9}/.]+).*/”, “[url=file:1]//1[/url]“, $_SERVER['REMOTE_ADDR']);
  46. return $this->proxy;
  47. }
  48. }
  49. function getIp()
  50. {
  51. if (isset($_SERVER['HTTP_CLIENT_IP']) && $_SERVER['HTTP_CLIENT_IP'])
  52. {
  53. $ip = $_SERVER['HTTP_CLIENT_IP'];
  54. }
  55. elseif (isset($_SERVER['HTTP_X_FORWARDED_FOR']) && $_SERVER['HTTP_X_FORWARDED_FOR'])
  56. {
  57. $ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
  58. }
  59. else
  60. {
  61. $ip = $_SERVER['REMOTE_ADDR'];
  62. }
  63. $this->clientIp = preg_replace(“/^([{0-9}/.]+).*/”, “[url=file:1]//1[/url]“, $ip);
  64. return $this->clientIp;
  65. }
  66. }
  67. ?>

你可以将这段判断代码加到每一个用户会访问到的地方,一旦判断出是代理服务器访问网站会输出“Proxies Forbidden”,如果开启了高级匿名代理服务器则会显示“Forbidden:High Anonymous Proxy Connection”, 当然你也可以通过加入过侧边栏,或者页脚来达到一举多得的防范目的。
当然还可以通过下面这段代码实现揪出IP源来进行.htaccess的封锁。

·········10········20········30········40········50········60········70········80········90········100·······110·······120·······130·······140·······150
  1. function getIP()
  2. {
  3. static $realip;
  4. if (isset($_SERVER)){
  5. if (isset($_SERVER["HTTP_X_FORWARDED_FOR"])){
  6. $realip = $_SERVER["HTTP_X_FORWARDED_FOR"];
  7. } else if (isset($_SERVER["HTTP_CLIENT_IP"])) {
  8. $realip = $_SERVER["HTTP_CLIENT_IP"];
  9. } else {
  10. $realip = $_SERVER["REMOTE_ADDR"];
  11. }
  12. } else {
  13. if (getenv(“HTTP_X_FORWARDED_FOR”)){
  14. $realip = getenv(“HTTP_X_FORWARDED_FOR”);
  15. } else if (getenv(“HTTP_CLIENT_IP”)) {
  16. $realip = getenv(“HTTP_CLIENT_IP”);
  17. } else {
  18. $realip = getenv(“REMOTE_ADDR”);
  19. }
  20. }
  21. return $realip;
  22. }

当然这里的代码主要是防范CC攻击, 如果想做到非常安全,那么不止应该有强健的代码保护,同样需要有强大的主机支持了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值