]> git.mxchange.org Git - friendica.git/commitdiff
Preventing a DDoS with the zrl parameter.
authorMichael Vogel <icarus@dabo.de>
Sat, 28 Mar 2015 07:29:01 +0000 (08:29 +0100)
committerMichael Vogel <icarus@dabo.de>
Sat, 28 Mar 2015 07:29:01 +0000 (08:29 +0100)
boot.php
include/gprobe.php

index 9f6598e927b97fd3da929e96142c041d111a9994..3d4744d9b1314cb2a305d45e8c6fe8f0ec255d95 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($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"], 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..3f3164f763cb8e590ff5009d5d8806f9d1f76743 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"], 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') ",