Sicherheit in PHP

mod_security

Was ist mod_security?

XSS und SQL Injection verhindern mit mod_security


apt-get update
apt-get install libapache-mod-security

Falls das Modul noch nicht installiert ist.

---------------------------------------------------------------------

SecFilterSelective ARGS "<[[:space:]]*script"
SecFilterSelective ARGS "<[[:space:]]*meta"

Diese beiden Regeln filtern <script und <meta aus der URL!
<script wegen XSS und <meta wegen Umleitungen!

---------------------------------------------------------------------

SecFilterSelective ARGS "UNION"
SecFilterSelective ARGS "SELECT"
SecFilterSelective ARGS "INSERT"

Diese Regeln filtern SQL Befehle!

---------------------------------------------------------------------

SecFilterSelective ARGS "/etc/passwd"
SecFilterSelective ARGS "/bin/*"

Falls safemode off ist, werden diese Vezeichnisse geschützt!

---------------------------------------------------------------------

SecServerSignature "Microsoft-IIS/5.2"

Gaukelt Security Scannern einen anderen Webserver vor!

---------------------------------------------------------------------


Weiteres unter: http://www.securityfocus.com/infocus/1739

edit: Das ist ein Apache Modul und hat nur indirekt etwas mit PHP zu tun.
 
Zuletzt bearbeitet:
Ich glaube dieses Thema passt gut zu einer Fragestellung von mir.
Ich habe Heute eine E-Mail über ein Kontaktformular bekommen in der folgendes Stand:

message: Ihr Webspace ist unsicher...

Würde ich fixen bevor es jemand der es böse meint merkt.

Jetzt weiß ich nicht was der Absender mit Fixen meint, ich habe kaum Ahnung von PHP und war Froh das ich es hinbekommen habe Inhalt und Design zu trennen und nun so ein Problem.

LG Daniel
 
Ok , Danke.

Wenn ich das richtig verstanden habe ist "seite" die Variable über die ich im Menü jeweils den Inhaltwechsel machen kann. Die kann ich ja beliebig ändern.

Nun verstehe ich Sinn und Zweck von den ganzn Pfaden nicht bzw. wie ich das umändern muss wenn bei mir alles im selebn Verzeichnis liegt.

Hier nochmal der Code:

PHP:
$error = false;
if( empty($_GET['seite']) ) {
    $_GET['seite'] = 'news/index';
}
if( strpos($_GET['seite'], '..') !== false ) {
    $error = true;
}
if( !$error && ($absPath = realpath('html/'.$_GET['seite'].'.html')) !== false ) {
    readfile($absPath);
} else if( !$error && ($absPath = realpath('php/'.$_GET['seite'].'.php')) !== false ) {
    include $absPath;
} else {
    readfile('html/error.html');
}
 
Wofuer ist dieser Thread nicht gedacht:
  • Fragen ob ein Script sicher ist
    Wir wollen hier eher allgemein zum Thema Sicherheit in PHP diskutieren und nicht auf spezielle Scripts eingehen. Natuerlich wollen wir hier auch Code-Beispiele sehen, aber eben nicht, dass jemand sein Script (oder einen Ausschnitt) postet und fragt ob der Code sicher ist.
Stelle deine spezifische Frage doch bitte in einem eigenen Thema.
 
Gibt es die - oder eine Anleitung, was man machen sollte? Also auch für newbies?

Gruß und vielen Dank
Muckel

Alles, was irgendwie ins Scripte gelangen könnte überprüfen und vor dem schreiben in die Datenbank auf jeden fall escapen

Soetwas ist absolutes "no-go" und ein doppelter "klogriff":

PHP:
$timer=mysql_query("SELECT ".strtolower($kampdatas2[8])." FROM zeus_".strtolower($_GET['art'])." WHERE id='$kampdatas2[2]'");

Richtiger wäre, wenn alle Vars (alles innerhalb des REQUEST und Uri-Übergaben) auf Deklaration und richtige Werte geprüft sind und einen Default-Wert bekommen, sobald sie leer sind:

PHP:
$art = (isset($_GET['art']) && !empty($_GET['art']) ? htmlentities($_GET['art']) : '');

Wenn du Daten aus einer Datenbank holst (mysql_fetch_array), dann sei nicht so dumm (wie der "Programmierer" der obenstehenden Query) und nutze die Positionen innerhalb des Arrays, sondern die Namen der Keys....das ist erst mal übersichtlicher und du musst nicht dein gesamtes Script fixen, sobald 1 Tabelle innerhalb der Datenbank erweitert willst ;)

Zu der obenstehenden Sql-Query fällt mir nichts mehr ein (Gänsehaut eben) :D
 

Neue Beiträge

Zurück