]> git.mxchange.org Git - friendica.git/commitdiff
Merge pull request #1453 from annando/ddos-with-gprobe
authorTobias Diekershoff <tobias.diekershoff@gmx.net>
Sat, 28 Mar 2015 08:12:24 +0000 (09:12 +0100)
committerTobias Diekershoff <tobias.diekershoff@gmx.net>
Sat, 28 Mar 2015 08:12:24 +0000 (09:12 +0100)
Prevention for DDoS attach through gprobe

boot.php
include/gprobe.php

index 9f6598e927b97fd3da929e96142c041d111a9994..9db210840fd8cfccd0747e55ee17afd09ff2ef13 100644 (file)
--- a/boot.php
+++ b/boot.php
@@ -2181,6 +2181,20 @@ function get_my_url() {
 function zrl_init(&$a) {
        $tmp_str = get_my_url();
        if(validate_url($tmp_str)) {
+
+               // Is it a DDoS attempt?
+               // The check fetches the cached value from gprobe to reduce the load for this system
+               $urlparts = parse_url($tmp_str);
+
+               $result = Cache::get("gprobe:".$urlparts["host"]);
+               if (!is_null($result)) {
+                       $result = unserialize($result);
+                       if ($result["network"] == NETWORK_FEED) {
+                               logger("DDoS attempt detected for ".$urlparts["host"]." by ".$_SERVER["REMOTE_ADDR"].". server data: ".print_r($_SERVER, true), LOGGER_DEBUG);
+                               return;
+                       }
+               }
+
                proc_run('php','include/gprobe.php',bin2hex($tmp_str));
                $arr = array('zrl' => $tmp_str, 'url' => $a->cmd);
                call_hooks('zrl_init',$arr);
index 52c5483c87c2ef213f114fb88b5aa38a33f69f3c..03cdbd072ba6debb9e5e03ef3b5468d2e58a3d10 100644 (file)
@@ -41,7 +41,23 @@ function gprobe_run(&$argv, &$argc){
 
        if(! count($r)) {
 
+               // Is it a DDoS attempt?
+               $urlparts = parse_url($url);
+
+               $result = Cache::get("gprobe:".$urlparts["host"]);
+               if (!is_null($result)) {
+                       $result = unserialize($result);
+                       if ($result["network"] == NETWORK_FEED) {
+                               logger("DDoS attempt detected for ".$urlparts["host"]." by ".$_SERVER["REMOTE_ADDR"].". server data: ".print_r($_SERVER, true), LOGGER_DEBUG);
+                               return;
+                       }
+               }
+
                $arr = probe_url($url);
+
+               if (is_null($result))
+                       Cache::set("gprobe:".$urlparts["host"],serialize($arr));
+
                if(count($arr) && x($arr,'network') && $arr['network'] === NETWORK_DFRN) {
                        q("insert into `gcontact` (`name`,`url`,`nurl`,`photo`)
                                values ( '%s', '%s', '%s', '%s') ",