Hallo Ralph,
ich bin zwar etwas spät, aber bei mir hört der Tag bekanntlich ja erst am nächsten Tag auf, so dass es dann doch noch irgendwie noch passt. :wink:
Hier mein Tipp zum Safer Internet Day:
Es gibt eine Menge Websites auf denen sich Schadsoftware befindet. Surft man diese mit einem ungesichertem Browser / einem ungesichertem System an, ist die Wahrscheinlichkeit hoch, dass man sich dabei infiziert.
Doch wie kann man z.B. als Foren-Betreiber seine Besucher vor gefährlichen Links schützen?
Ganz einfach: automatisiert!
Ich habe hierzu mal kurz eine PHP Klasse geschrieben, die einen beliebigen HTML-Content auf Malware-Links hin prüft. Als Blacklist wird die Malware Domain Blocklist verwendet (es kann aber auch jede andere Blacklist eingebunden werden).
Die PHP Klasse gebe ich unter der GNU Lizenz frei, sie darf also überall beliebig eingebaut und beliebig modifiziert werden (unten im Beitrag gibt es das Ganze auch nochmal gepackt als ZIP-Archiv). :wink:
class.antiMalwareLinks.php
<?php
/***************************************************************
* Copyright notice
*
* (c) 2011 Matthias Gläßner <info@matthias-glaessner.de>
* All rights reserved
*
* This script is part of the Typo3 project. The Typo3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
***************************************************************/
class antiMalwareLinks {
private $url = \'\'; // aktuelle Website => URLs dieser Domain (=interne Links) werden nicht geprüft
private $blacklisted_domains = \'\'; // Datei der Malware Domains z.B. mirror1.malwaredomains.com/files/domains.txt
private $delimiter = ""; // z.B. \\t = tab
private $del_index_url = 0; // an welcher Position befindet sich die URL
private $exclude = array(); // Exclude Felder oder Domains
private $blacklist = array();
/**
* ************************************************
* __construct
* Werte zuweisen und blacklisted_domains einlesen
* ************************************************
* @param url STRING
* @param blacklisted_domains FILE
* @param delimiter STRING
* @param del_index_url INTEGER
* @param exclude ARRAY
* @author Matthias Gläßner <info@matthias-glaessner.de>
*/
function __construct($url, $blacklisted_domains, $delimiter, $del_index_url, $exclude){
// Werte zuweisen
$this->url = $url;
$this->blacklisted_domains = $blacklisted_domains;
$this->delimiter = $delimiter;
$this->del_index_url = $del_index_url;
$this->exclude = $exclude;
// Datei als Array einlesen
$lines = file($this->blacklisted_domains, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
// Datei zeilenweise durchgehen und Blacklist erstellen
foreach ($lines as $line_num => $line) {
// Zeile aufsplitten
$data = explode($this->delimiter,$line);
// Host der jeweiligen Zeile holen
$domain = $data[$this->del_index_url];
// Prüfen, ob es sich um Feld/Domain ignoriert werden soll
if (!in_array($domain,$this->exclude)) {
// falls nicht, zur Blacklist hinzufügen
$this->blacklist[] = $domain;
}
}
}
/**
* ************************************************
* Function check()
* Prüft einen HTML Content auf Links, die
* auf Malware-URLs verweisen
* ************************************************
* @param html TEXT(HTML)
* @return INTEGER Anzahl der gefundenen Malware Links
* @author Matthias Gläßner <info@matthias-glaessner.de>
* @author Florian Buenzli <floern.com> (Links finden)
*/
public function check($html) {
$urls_malicious = 0; // Anzahl der Malware Links
// Links finden
if(preg_match_all(\'#<a\\s([^>]*)>#Usi\', $html, $array)){
foreach($array[1] as $key){
if(preg_match(\'#href=(\\\'|")([^>"\\\']+)(\\\\1)#Uis\',$key,$href) && !preg_match(\'#href=(\\\'|")\\##is\',$key)){
$href = trim($href[2]);
$host = preg_replace(\'#^.+://([^/]+)(/.*)?$#\', \'$1\', $this->url);
if(preg_match(\'#^https?://#Usi\', $href) && !preg_match(\'#^https?://\'.preg_quote($host,\'#\').\'#Usi\', $href)){
// Nur externe Links prüfen
$urlhost = parse_url($href,PHP_URL_HOST);
// Falls www. => www. entfernen
if (substr($urlhost,0,4)==\'www.\') {$urlhost=substr($urlhost,4,strlen($urlhost)-4);}
// URL auf Blacklist-Eintrag checken
if (in_array($urlhost,$this->blacklist)) {$urls_malicious++;}
}
}
}
}
// Anzahl der Malware Links zurückgeben
return $urls_malicious;
}
}
?>
antiMalwareLinks.php (
Beispielaufruf)
<?php
// Klasse einbinden
require_once(\'class.antiMalwareLinks.php\');
// Beispiel HTML Content holen
$html = file_get_contents(\'http://www.seitenreport.de\');
// Der HTML einen infizierten Link (ACHTUNG!) hinzufügen
$html .= \'Ich bin infiziert\';
/**********
* Klasse erzeugen
*********/
$antiMalware = new antiMalwareLinks(
/* interne Links dieser Domain nicht prüfen */ \'http://www.seitenreport.de\',
/* blacklisted_domains */ \'http://mirror1.malwaredomains.com/files/domains.txt\', /* Tipp: lokal abspeichern und auf {meinverz}/domains.txt ändern */
/* delimiter */ "\\t", /* tabulator */
/* an welcher pos befindet sich jeweils die URL */ 2,
/* exclude fields or domains */ array(\'domain\',\'notice\')
);
// Ergebnis ausgeben
echo \'Gefundene Malware Links: \'.$antiMalware->check($html);
?>
Die Klasse eignet sich z.B. hervorragend, um User-generated-Content zu prüfen, kann aber genausogut als Malware-Check für fremde Seiten verwendet werden (wird in Kürze auch als neuer Analysepunkt in den Seitenreport eingebaut
)
Beste Grüße,
Matthias
SEO Analyse und Website-Check mit Seitenreport
Beitrag erstellen
EinloggenKostenlos registrieren