Lizenz

[show_hide title=“Changelog – next release“]

// 0.2.2 (next release)

[/show_hide]

[show_hide title=“Changelog – Full“]

// 0.2.1
- fix: debug() - fix log collumn seperator
- fix: internal - correct db table engine collation
- improve: check_injections() - add mysql injection pattern
- add: debug() - integrate logrotation and archive function
- add: debug() - integrate backtrace Option to debug third-party code
- add: debug() - integrate session_id to get logs from one specific request 
 
// 0.2.0 10.05.2014
- fix: escape() - replace breaks with html break
- improve: zip() - support multiple files
- deprecated: method file_to_zip by zip with notice
 
// 0.1.9 - 04.04.2014
- fix: spelling in deprecated warning
- fix: error on wrong parameter in array_utf8_decode()
- fix: error on wrong parameter in array_utf8_encode()
- improve: reduce memory usage of check_injections()
- deprecated: method check_url_injections
 
// 0.1.8 - 22.02.2014
- add: post_json() - make a POST request with JSON Header
- add: put_json() - make a PUT request with JSON header
- add: global setting "http_timoeut" = 2
- add: file_to_zip() - create ZIP archive
- improve: check_url_injection() - prevent busybox injection
- improve: check_get_injection() - prevent busybox injection
- improve: change API requests to hide private API key
 
// 0.1.7 - 08.02.2014
- add: get_query_insert_id()
- add: post() $timeout value
- add: get() $timeout value
- add: validate_ip_address()
- add: get_geoip()
- add: array_utf8_encode()
- add: array_utf8_decode()
- bugfix: check_url_injection() - execute from CLI breaks
- bugfix: query() - execute from CLI breaks
- bugfix: escape() now supports both mysqli (primary) and mysql (secondary)
- bugfix: check_injection() - doesnt work in one Special case
- improve: mysql injections rate
- improve: URL injections rate
- improve: local error messages
- improve: query() - mysql error logging
- improve: debug() - Logile alignment
- improve: debug() - __FILE__ and __LINE__ now optional
- deprecated: method random_string by string_random with notice
- deprecated: method check_email by validate_email with notice
 
// 0.1.6.0
- add: method check_injections()
- add: method check_get_injection()
- add: method check_post_injection()

[/show_hide]

Setup

Systemvoraussetzungen: (PHP >= 5 / ionCube Loader)

index.php

// baebeca improve class
require_once('baebeca_improve.php');
if (class_exists('baebeca_improve')) {
    $baebeca = new baebeca_improve();
 
    // custom settings
    $baebeca->autoupdate('your-email@domain.com');
    $baebeca->set('debug_display_errors', true);
    $baebeca->check_injections();
}

.htaccess

RewriteEngine On
 
<FilesMatch "^baebeca_improve"> 
deny from all
</FilesMatch>

[show_hide title=“Wordpress – Setup“]

// file: /wp-content/themes/<your theme>/functions.php
// baebeca improve class
require_once('baebeca_improve.php');
if (class_exists('baebeca_improve')) {
    $baebeca = new baebeca_improve();
    $baebeca->check_injections();
}

[/show_hide]

methods – class control

true __construct(string $api_key = '')

Setzt alle Klassen standard Einstellungen.

'api_key' = $api_key
'debug_display_errors' = false
// debugging only for this ip address
'debug_ip' = false
// css color
'debug_color' = 'red'
'debug_prefix' = date('d.m.y H:i:s', time()).' - '
// generate logfile on 'debug_log_path'
'debug_log_errors' = true
'debug_log_prefix' = $this->get_remote_ip_address().' - '.date('d.m.y H:i:s', time()).' - '
// path to create "baebeca_improve.log" if 'debug_log_errors' enabled
'debug_log_path' = $_SERVER['DOCUMENT_ROOT']
'mysql_reference' = false
'mysqli_class_reference' = false
// default mcrypt key is hidden here - please change to your own key
'crypt_key' = <hidden>
// default mcrypt cipher - feel free to change
'crypt_cipher' = 'blowfish'
// default mcrypt mode - feel free to change
'crypt_mode' = 'ecb'
// global timeout for all http/https connections
'http_timeout' = 2

Alle Einstellungen lassen via set() ändern.

 

boolean set(string $setting, string $value)

Ändert globale Einstellungen ab, die mit __construct vorbelegt wurden.

[show_hide title=“Beispiele“]

// Aendern der Farbe von Fehlerausgaben zu Orange
$baebeca->set('debug_color', 'orange');
 
// Deaktivieren des Logfiles
$baebeca->set('debug_log_errors', false);

[/show_hide]

 

boolean autoupdate(string $email, string $ip_address = false)

Prüft ob eine neue Version von baebeca_improve verfügbar ist. Steht eine neue Version zum Download bereit, wird ein Backup der Datei „baebeca_improve.php“ erstellt und durch die neue Version ersetzt. Nach erfolgreichem Update wird $email informiert.
Backupdatei: „baebeca_improve_bak.php“.
Wird der Parameter $ip_address gesetzt, wird das Update nur ausgeführt sofern der Aufruf von angegebener IP-Adresse initiiert wird.

[show_hide title=“Beispiele“]

// autoupdate
$baebeca->autoupdate('admin@food.com');
 
// autoupdate only from the sysadmins ip address
$baebeca->autoupdate('admin@food.com', '192.168.2.99');

[/show_hide]

 

methods – security

boolean check_injections(array $whitelist = false, $no_exit = false)

Prüft die aktuell aufgerufene URL, empfangene GET Parameter sowie empfangene POST Parameter auf Zeichen und Strings die für entsprechende Injections genutzt werden. Wird eine Injection erkannt, wird ein Logfileeintrag mit entsprechendem pattern erzeugt und der Scriptaufruf mit einem exit() beendet.
Über den Parameter $whitelist lässt sich ein Array von Strings übergeben die nicht als Angriff gewertet werden.
Wird der Parameter $no_exit auf true gesetzt, so gibt die Methode lediglich ein true zurück wenn ein Angriff erkannt wird.

Es werden die Methoden check_get_injection() und check_post_injection() ausgeführt.
[show_hide title=“Beispiele“]

// check
if ($baebeca->check_injections(false, true)) {
     die('Sry Dude');
}
 
// Scripte beenden mit Ausnahme von "passwd" in URL, POST und GET Parameter
$baebeca->check_injections(array('passwd'));

[/show_hide]

boolean check_get_injection(array $whitelist = false, $no_exit = false)

Prüft empfangene GET Parameter auf Zeichen und Strings die für entsprechende Injections genutzt werden. Wird eine Injection erkannt, wird ein Logfileeintrag mit entsprechendem pattern erzeugt und der Scriptaufruf mit einem exit() beendet.
Über den Parameter $whitelist lässt sich ein Array von Strings übergeben die nicht als Angriff gewertet werden.
Wird der Parameter $no_exit auf true gesetzt, so gibt die Methode lediglich ein true zurück wenn ein Angriff erkannt wird.

[show_hide title=“Beispiele“]

// check
if ($baebeca->check_get_injection(false, true)) {
     die('Sry Dude');
}
 
// Scripte beenden mit Ausnahme von "passwd" als GET Parameter
$baebeca->check_get_injection(array('passwd'));

[/show_hide]

boolean check_post_injection(array $whitelist = false, $no_exit = false)

Prüft empfangene POST Parameter auf Zeichen und Strings die für entsprechende Injections genutzt werden. Wird eine Injection erkannt, wird ein Logfileeintrag mit entsprechendem pattern erzeugt und der Scriptaufruf mit einem exit() beendet.
Über den Parameter $whitelist lässt sich ein Array von Strings übergeben die nicht als Angriff gewertet werden.
Wird der Parameter $no_exit auf true gesetzt, so gibt die Methode lediglich ein true zurück wenn ein Angriff erkannt wird.

[show_hide title=“Beispiele“]

// check
if ($baebeca->check_post_injection(false, true)) {
     die('Sry Dude');
}
 
// Scripte beenden mit Ausnahme von "passwd" als POST Parameter
$baebeca->check_post_injection(array('passwd'));

[/show_hide]

string escape(string $value)

Sichert/Escaped einen String gegen MySQL Injections, sodass er ohne weitere Prüfungen in MySQL Querys genutzt werden kann.
Vorrangig wird versucht mysqli zu verwenden – alternativ steht auch mysql zur Verfügung.
Abhängige globale Einstellungen: mysql_reference, mysqli_class_reference

[show_hide title=“Beispiele“]

// Abfangen einer MySQL Injection bei SELECT
$result = mysql_query("SELECT FROM `users` WHERE `user_id` = '".$baebeca->escape($_POST['id'])."'");
 
// Abfangen einer MySQL Injection bei INSERT
$result = mysql_query("INSERT INTO `comments` SET `comment` = '".$baebeca->escape($_POST['comment'])."'")
 
// Sicherung in Verbindung mit Fehlerprüfung
$result = $baebeca->query("INSERT INTO `comments` SET `comment` = '".$baebeca->escape($_POST['comment'])."'");

[/show_hide]

string hash(string $password, string $salt = '')

Hashed ein Passwort mehrfach mit verschiedenen Hash Funktionen und liefert einen MD5 String zurück.
Ist der Parameter $salt gesetzt, wird das Passwort gesalzen.

[show_hide title=“Beispiele“]

// Passwort hashen - mit Salz
$password = $baebeca->hash('s3cr3t-p$ssword', 'newuiwefi');
 
// Passwort hashen
$password = $baebeca->hash('s3cr3t-p$ssword');

[/show_hide]

string encrypt(string $data)

Verschlüsselt ein Passwort mit mcrypt.
Abhängige globale Einstellungen: crypt_key, crypt_cipher, crypt_mode

[show_hide title=“Beispiele“]

// string encode
$password = $baebeca->enrypt('s3cr3t-p$ssword');
 
// returns uSjIXQviL6FL3KxJ7/goiA==
echo $password;

[/show_hide]

string decrypt(string $data)

Entschlüsselt ein Passwort mit mcrypt.
Abhängige globale Einstellungen: crypt_key, crypt_cipher, crypt_mode

[show_hide title=“Beispiele“]

// string decode
$password = $baebeca->decrypt('uSjIXQviL6FL3KxJ7/goiA==');
 
// returns s3cr3t-p$ssword
echo $password;

[/show_hide]

methods – validate

boolean validate_email(string $email)

Prüft ob $email der Notation einer E-Mail Adresse entspricht, und an diese Domain E-Mails versendet werden können. (Prüft ob MX-Records vorhanden sind)

[show_hide title=“Beispiele“]

// Email pruefen | return false
if (!$baebeca->validate_email('nina@hotmail.co') {
   echo 'Mailadresse falsch';
}
 
// Email pruefen | return true
if (!$baebeca->validate_email('nina@hotmail.com') {
   echo 'Mailadresse falsch';
}

[/show_hide]

boolean validate_ip_address(string $ip_address)

Prüft ob $ip_address der Notation einer IP Adresse entspricht.

[show_hide title=“Beispiele“]

$baebeca->validate_ip_address('8.8..8')
# false

$baebeca->validate_ip_address('8.8.8.8')
# true

[/show_hide]

methods – debug

boolean debug(string $error_message, boolean $disable = false)

Gibt einen formatierten logfile string zurück und/oder fügt diesem einem Logfile hinzu.
Ist der Parameter $disbale gesetzt wird direkt Funktion abgebrochen.
Abhängige globale Einstellungen: debug_display_errors, debug_ip, debug_color, debug_prefix, debug_log_errors, debug_log_prefix, debug_log_path

resource query(string $query, __FILE__ = false, __LINE__ = false)

Führt einen MySQL Query aus, und prüft die Ausführung auf Fehler. Sollte ein Fehler in $query auftreten, werden alle nötigen Dateien in der MySQL Tabelle „baebeca_mysql_error“ festgehalten.

Vorrangig wird versucht mysqli zu verwenden – alternativ steht auch mysql zur Verfügung.
Abhängige globale Einstellungen: mysql_reference, mysqli_class_reference

int get_query_insert_id()

Gibt die ID des letzten MySQL Statement zurück. (Durch die Methode query() kann der Original Wert verfälscht werden, sofern ein SQL-Fehler auftritt und dieser geloggt wird.)

methods – strings

string string_remove_breaks(string $string)

Entfernt Unix/Windows Zeilenumbrüche aus einem String.

[show_hide title=“Beispiele“]

// Zeilenumbrueche entfernen
echo $baebeca->string_remove_breaks($string);

[/show_hide]

boolean string_starts_with(string $haystack, string $needle, $insensetiv = true)

Prüft ob der String $haystack mit dem String $needle beginnt.
Ist $insensetiv auf false gesetzt, wird nach Groß/Kleinschreibung unterschieden.

[show_hide title=“Beispiele“]

// return true
if ($baebeca->string_starts_with('Rolingcoaster', 'roling')) {
   echo 'roling steht am Anfang';
}
 
// return false
if ($baebeca->string_starts_with('Rolingcoaster', 'tycoon')) {
   echo 'tyccon steht am Anfang';
}

[/show_hide]

boolean string_contains(string $haystack, string $needle, $insensetiv = true)

Prüft ob der String $needle in String $haystack enthalten ist.
Ist $insensetiv auf false gesetzt, wird nach Groß/Kleinschreibung unterschieden.

[show_hide title=“Beispiele“]

// return true
if ($baebeca->string_contains('Rolingcoaster', 'roling')) {
   echo 'roling ist enthalten';
}
 
// return false
if ($baebeca->string_contains('Rolingcoaster', 'tycoon')) {
   echo 'tyccon ist enthalten';
}

[/show_hide]

string string_random($length = 10, $lower = true, $upper = true, $numbers = true)

Generiert einen String aus der angegeben Anzahl und Listen von Zeichen.
$lower_cases beinhaltet die Kleinbuchstaben a-z
$upper_cases beinhaltet  die Großbuchstaben A-Z
$numbers beinhaltet  die Zahlen 0-9

[show_hide title=“Beispiele“]

// Passwort erzeugen - 8 Zeichen - Alle Zeichen
$password = $baebeca->string_random(8);
 
// Passwort erzeugen - 10 Zeichen - Nur Zahlen
$password = $baebeca->string_random(10, false, false, true);

[/show_hide]

string string_unicode_to_utf8(string $value)

Konvertiert einen String von unicode zu uft8.

methods – numbers

string number(float $value)

Formatiert eine Zahl mit einem Punkt als Tausender-Trennzeichen.

[show_hide title=“Beispiele“]

// echo 15.478.894.651.454
echo $baebeca->number(15478894651454);

[/show_hide]

methods – files

boolean zip(Array $source, string $target)

Create a new ZIP archive (or overwrite if exist) from $source file(s) to $target.

[show_hide title=“Beispiele“]

// create archive "birthday.zip"
$baebeca->file_to_zip('/videos/birthday.mpeg', '/videos/birthday.zip');

[/show_hide]

methods – arrays

string array_to_json(array $array)

Konvertiert ein Array in einen String im JSON Format.

[show_hide title=“Beispiele“]

$baebeca->array_to_json(array('name' => 'anton', 'surname' => 'nino'));
# {"name":"anton","surname":"nino"}

[/show_hide]

array json_to_array(string $json)

Konvertiert ein JSON String in ein assoziatives array.

[show_hide title=“Beispiele“]

$array = $baebeca->json_to_array($json);
echo $array['title'];

[/show_hide]

array array_utf8_encode(array $array)

Konvertiert $array rekursiv nach UTF8.

array array_utf8_decode(array $array)

Konvertiert $array rekursiv von UTF8.

methods – get

string get($url, $timeout = 2)

Ruft angegebene $url per GET auf und gibt den Inhalt zurück.
$timeout Sekunden wird auf eine Antwort von $url gewartet, ansonsten mit false abgebrochen.
Wird $timeout auf false gesetzt, greift der maximale Timeout aus den lokalen PHP Einstellungen.

[show_hide title=“Beispiele“]

echo $baebeca->get('http://www.google.de');

[/show_hide]

string get_remote_ip_address()

Gibt die IP-Adresse des Besuchers zurück. Wird das Script via CLI ausgeführt wird false zurückgegeben.

[show_hide title=“Beispiele“]

// IP Adresse ausgeben
echo $baebeca->get_remote_ip_address();

[/show_hide]

array get_geoip(string $ip_address)

Gibt ein Array (UTF-8) mit Informationen zur IP Adresse zurück.
Abhängige globale Einstellungen: api_key

[show_hide title=“Beispiele“]

$proxy = $baebeca->get_geoip('204.45.133.74');
# Array
# (
#    [continent_code] => NA
#    [country_code] => US
#    [country_code3] => USA
#    [country_name] => United States
#    [region] => CO
#    [city] => Denver
#    [postal_code] => 80202
#    [latitude] => 39.752498626709
#    [longitude] => -104.99949645996
#    [dma_code] => 751
#    [area_code] => 303
# )

[/show_hide]

[alert type=“blue“]Ein API Key ist notwendig[/alert]

array get_proxy(string $stack = 'both' ['both', 'ipv4', 'ipv6'])

Gibt ein Array bestehend aus array(‚ip_address‘, ‚port‘) zurück.
Der Parameter $stack kann folgende Werte besitzen: [‚both‘, ‚ipv4‘, ‚ipv6‘].
Abhängige globale Einstellungen: api_key

[show_hide title=“Beispiele“]

// Random Proxy holen
$proxy = $baebeca->get_proxy();
echo $proxy['ip_address'].'\r\n';
echo $proxy['port'];

[/show_hide]

[alert type=“blue“]Ein API Key ist notwendig[/alert]

methods – post

string post($url, $post_array = NULL, $timeout = 2)

Ruft angegebene $url per POST auf und gibt den Inhalt zurück. Sofern $post_array angegeben ist, werden diese Parameter als POST-VALUES an die Ziel $url übergeben.
$timeout Sekunden wird auf eine Antwort von $url gewartet, ansonsten mit false abgebrochen.
Wird $timeout auf false gesetzt, greift der maximale Timeout aus den lokalen PHP Einstellungen.

[show_hide title=“Beispiele“]

echo $baebeca->post('http://www.google.de', array('search' => 'Suchwort', 'lang' => 'en'));

[/show_hide]

string post_json($url, array $json, $timeout = 2)

Ruft angegebene $url per POST inkl. JSON-HEADER auf und gibt den Inhalt zurück. $timeout Sekunden wird auf eine Antwort von $url gewartet, ansonsten mit false abgebrochen.
Wird $timeout auf false gesetzt, greift der maximale Timeout aus den lokalen PHP Einstellungen.

[show_hide title=“Beispiele“]

echo $baebeca->post_json('http://www.google.de', array('search' => 'Suchwort', 'lang' => 'en'));

[/show_hide]

methods – put

string put_json($url, array $json, $timeout = 2)

Ruft angegebene $url per PUT inkl. JSON-HEADER auf und gibt den Inhalt zurück. $timeout Sekunden wird auf eine Antwort von $url gewartet, ansonsten mit false abgebrochen.
Wird $timeout auf false gesetzt, greift der maximale Timeout aus den lokalen PHP Einstellungen.

[show_hide title=“Beispiele“]

echo $baebeca->put_json('http://www.google.de', array('search' => 'Suchwort', 'lang' => 'en'));

[/show_hide]

boolean put_proxy_vote(string $voting ['ok', 'nok'])

Bewertet den zuletzt über get_proxy() erhaltenen Proxy.
Der Parameter $voting kann folgende Werte besitzen: [‚ok‘, ’nok‘].
Abhängige globale Einstellungen: api_key

[show_hide title=“Beispiele“]

// Letzten Proxy bewerten
$baebeca->put_proxy_vote('ok');

[/show_hide]

[alert type=“blue“]Ein API Key ist notwendig[/alert]