conn = mysqli_connect(DB_HOST,DB_USER,DB_PASSWORD); $ok = mysqli_select_db($this->conn,DB_NAME); if (!$ok) return false; $this->get_options(); // plugin disabled if (!$this->enable) return; // current request is admin's one if (isset($_COOKIE['wpantiddos']) && $_COOKIE['wpantiddos']==$this->cookie) return; if ($this->only_params_enabled) if (!$this->only_param_detected()) return; // detect request type and limits if ($this->xhr_request()) { if ($this->hits_limit_XHR=='ANY') return; $request_type = 'xhr'; $hits_limit = $this->hits_limit_XHR; $seconds_limit = wpadtiddos_seconds_limit_XHR; } elseif ($_POST && isset($_POST[$this->pass_param]) ) { if ($this->seconds_limit_AUTH=='ANY') return; $request_type = 'auth'; $seconds_limit = $this->seconds_limit_AUTH; $this->only_params .= ' '.$this->pass_param; $hits_limit = 1; } elseif ($_POST) { if ($this->seconds_limit_POST=='ANY') return; $request_type = 'post'; $hits_limit = 1; $seconds_limit = $this->seconds_limit_POST; } else { if ($this->hits_limit_GET=='ANY') return; $request_type = 'get'; $hits_limit = $this->hits_limit_GET; $seconds_limit = wpadtiddos_seconds_limit_GET; } if ($this->send_header) header("WP_AntiDDOS: yes"); if ($this->cloudflare) { if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) $_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_CF_CONNECTING_IP']; } $this->ip = $_SERVER['REMOTE_ADDR']; if ($this->block_cnet) $this->ip = substr($this->ip,0,strrpos($this->ip,'.')+1); $this->warm_level = ceil($hits_limit/2); try { $res = mysqli_query($this->conn,"SELECT count(*) kount FROM $this->table_name WHERE ip='".addslashes($this->ip)."' AND tstamp>".(time()-$seconds_limit)." AND type='$request_type'"); $row = mysqli_fetch_assoc($res); if (!$row) $this->error_msg = 'Error detected'; $this->hits = @$row['kount']+1; // consider current request too if ($this->hits==0) // if no hits from this IP $this->visitor = "new"; elseif ($this->hits>$hits_limit) $this->visitor = "hot"; elseif ($this->hits>=$this->warm_level) $this->visitor = "warm"; else $this->visitor = "cool"; // add current hit mysqli_query($this->conn,"INSERT INTO $this->table_name SET ip='$this->ip', type='$request_type', tstamp=".time()); // cleanup ip list $clear_time = max($this->delay_time,$seconds_limit); mysqli_query($this->conn,"DELETE FROM $this->table_name WHERE tstamp<".(time()-$clear_time)); } catch(Exception $e) { $this->error_msg = $e->getString(); $this->status = 'error'; mysqli_close($this->conn); return; } mysqli_close($this->conn); if (!empty($this->error_msg) ) { $this->status = 'error'; } if ($this->auto && $this->visitor=='hot') { header('HTTP/1.0 503 Service Unavailable'); header('Status: 503 Service Unavailable'); header("Retry-After: ".($this->delay_time+1)); // submit form first if POST request if (!$_POST) print ""; else { $inputs = $this->array_to_fields($_POST); print '
'. $inputs. '
'; } if ($request_type=='auth') printf("


",$this->delay_time); else printf("


",$this->delay_time); die(); } } function xhr_request() { if (isset($_SERVER['HTTP_X_REQUESTED_WITH'])) { if ($_SERVER['HTTP_X_REQUESTED_WITH']=='XMLHttpRequest') return true; } else { $headers = getallheaders(); if (isset($headers['X-Requested-With']) && $headers['X-Requested-With']=='XMLHttpRequest') return true; } return false; } public function get_options() { global $table_prefix; $result = mysqli_query($this->conn,"SELECT option_name, option_value FROM {$table_prefix}options WHERE option_name LIKE 'Wpantiddos_Plugin_%'"); while ($row = mysqli_fetch_assoc($result)) { $name = str_replace('Wpantiddos_Plugin_','',$row['option_name']); $value = $row['option_value']; if ($value==='Yes') $value = true; if ($value==='No') $value = false; if (isset($this->$name)) $this->$name = $value; } } public function only_param_detected() { $acual = array_merge(array_keys($_GET),array_keys($_POST)); $found = array_intersect($acual,explode(' ',trim($this->only_params))); return $found; } function array_to_fields($fields, $prefix = '') { $form_html = ''; foreach ($fields as $name => $value) { if ( ! is_array($value)) { if ( ! empty($prefix)) { $name = $prefix . '[' . $name . ']'; } // generate the hidden field $form_html .= "\n"; } else { if ( ! empty($prefix)) { $subprefix = $prefix . '[' . $name . ']'; } else { $subprefix = $name; } $form_html .= array_to_fields($value, $subprefix); } } return $form_html; } } ?> Bram Vanhaeren › Bio & Contact

Bram Vanhaeren (28) Antwerpen, Belgium

I'm a creative on a mission to do more  

On a pursuit to predict trends & enhance digital customer satisfaction for online banking & beyond. Honoured to be part of creating multi-award-winning applications as a lead designer & art director at KBC (2016-2017) & Belfius (2018-2019).

Selected as one of the most creative under 25 globally by Adobe in 2014. Today I have the privilege to work with Iconic brands on colourful & energetic projects. Also passionate about adventurous bike riding, running & collector of classic tattoos with a touch of wackiness.

Business inquiries

Follow me @BramVanhaeren on Instagram, find me on Béhance or let's connect via LinkedIn

05/2018 — Present
UI Lead & Art director
Belfius Bank

01/2015 — 04/2018
Art director
KBC Bank & Insurances

05/2008 — Present
Freelance creative

04/2015 — 04/2017
Brand Ambassador

10/2012 — 09/2013
Junior Art Director
True agency

03/2013 — 06/2013
Creative Intern
Telenet Idealabs

— Selected clients

Adobe, Rolling Stone Magazine, Fast Company, Cubanisto, Nike, Pro.Direct, Estrella Damm, ESPN Magazine, Bleacher Report, Entertainment Weekly, Sportsnet Magazine, BBC, Deadline Hollywood, Corona, Future publishing, Imagine publishing, Globalish & many more.

— Honorable mention

Selected artist Adobe Photoshop 25 under 25, Globally
#51 Featured projects on the Béhance network

Cloud Studio (Belgium), House of Corona (Belgium), Movify (Belgium) OFFF Barcelona (Spain), Jaar van de Aap (Belgium), VIGC Adobe user group (Belgium), StoryMe (Belgium), Adobe MAX 2016 (San Diego), OFFF By Night (Belgium), OFFF 2017 Barcelona (Spain), House Of Innovation (Belgium), Pixels Festival (Belgium), OFFF 2016 (Spain), Adobe MAX 2015 (Los Angeles)

— Exhibitions

In A State of Flux (Aloft), #PS25Under25 (Adobe MAX), Ieder zenne meug, Markt van morgen, The Swan market, 5 Years Aloft, Beurs Ondernemen (Brussels Expo), Baetulona 100 Years, Episodes & Exposé (Designers against child slavery)

— Publications

Fast Company (USA), Doodle Magazine (World), Adobe Blog (World), FormFifityFive (World), Runners Bibble (UK), Photoshop Creative (Globally), Leather & Willow (UK), Bleacher Report (USA), RollingStone (World), T3 Magazine (USA), Gazet Van Antwerpen (BE), Weekend Knack (BE), Digital Arts Mastercall (World), Digital Arts Online (World), Photoshop Creative (UK), Digital Arts (UK), Deadline Hollywood (USA), Photoshop Creative (World), Computer Arts (World), Globalisch(USA), Sweat RX (AU), ESPN Magazine (USA), Deadline Hollywood (USA), Photoshop Creative (World), Computer Arts (World), Advanced Photoshop (UK), New Move Trend Diary (World), Brink Publishing (World), Men's Style (AU), Popular Mechanics (USA), AARP Media (USA), Digital Arts(UK), Advanced Photoshop (UK), Advanced Photoshop (FRA), Photoshop Creation (FRA), Weekly Entertainment (USA), Artpower New Typography (ASIA), Baetulona 100 Years (ES), Artpower Typography (World), Computer Arts (UK), ESPN Magazine (USA), Magic Graphics Book (World), Sportsnet Magazine (USA), Het Nieuwsblad (BE), ATV Reportage (BE), Kismet Magazine (World), Advanced Photoshop (NL), Essere Benessere (IT), Play Fonts (USA), Identity by Color (ASIA), Digital Arts (UK),OFFF Paris (FRA), Wall Art Book (ASIA), Semi Permanent 2° (UK), Computer Arts (UK), Digital Arts (UK), Computer Arts (BRA), UU Theory (FIN), Advanced Photoshop (NL), Advanced Creation (FRA), Wow Magazine (IND), Computer Arts (UK), Flyer Magazine (BE), Seasonal Affective (USA)