PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Grundlagen (http://www.selfphp.de/forum/forumdisplay.php?f=12)
-   -   PHP_Sicherheit vom Laien programmiert (http://www.selfphp.de/forum/showthread.php?t=25329)

wucke13 14.07.2014 12:11:06

PHP_Sicherheit vom Laien programmiert
 
Hallöchen, ich bin der Wucke und beschäftige mich seit nunmehr 3 Tagen mit PHP.
Ich hab dementsprechend wenig Ahnung. Ich bin ein Fan von Funktionen, kann mich aber mit objekorientierter Pogrammierung nicht so sehr anfreunden. Mir ist Prozedurale Programmierung wesentlich sympathischer.

So nun zur Frage:
Ich arbeite an einem Schulprojekt, in einem Team (welches das gute alte Motto 'Toll Ein Anderer Machts' bevolgt), als PHP-Zuständiger. Für bei dem Schulprojekt geht es um eine MySQL Datenbank, die unseren Vertretungsplan beherbergen soll. Natürlich gibt es einen öffentlichen Teil, aber ebene auch einen vertraulichen Teil um neue Stundenausfälle einzupflegen. Diesen Teil soll ich umsetzen.

Ich hab jetzt gut 20h damit verbracht ein Sicherheitsskript auszutüfteln, von dem ich meine das es Sicher ist, und wollte mir dazu mal ein wenig Kritik anhören. Besonders interessieren tuen mich natürlich Sicherheitslücken, aber wenn ihr da Code findet der eurer Meinung nach keinen Sinn ergibt, dann bitte auch rückmelden :)

Zum Einsatz des Skripts: Auf jeder der vertraulichen Seiten gibts am Anfang einen
<?php ?> Tag, der das Sicherheitsskript aufruft, also:
Code:

<?php
require_once 'auth.php';
auth_user();

Das eigentliche Skript sieht wie folgt aus:
Code:

<?php
################################
###Konstanten für MySQL#########
define("SQL_IP",  '127.0.0.1');
               
define("SQL_DB",  'test');
define("SQL_USR",  'root');
define("SQL_PWD", '');
################################


##################################
###Session erzeugen###############
ini_set('session.use_trans_id',1);
session_start();
if (!isset($_SESSION['ipadr']))
        {
        $_SESSION['ipadr'] = $_SERVER['REMOTE_ADDR'];
        }
        else if ($_SESSION['ipadr'] != $_SERVER['REMOTE_ADDR'])
        {
        kill_session();
        }
##################################


###############################
###Funktionen##################
function bind_user_to_session()
        {
        $_SESSION['username'] = $_POST["user"];
        $_SESSION['password'] = $_POST["pwd_md5"];
        }
       
function kill_session()
        {
        session_unset();
        if (isset($_COOKIE[session_name()]))
                {
                setcookie(session_name(), "", time()-86400);
                }
        session_destroy();
        }

function check_session()
        {
        if (isset($_SESSION['username']) AND isset($_SESSION['password']))
                {
                if ($_SESSION['username']!=null AND $_SESSION['password']!=null)
                        {
                        return true;
                        }
                }
        else
                {
                return false;
                }
        }
       
function check_if_post()
        {
        if (isset($_POST["user"]) AND isset($_POST["pwd_md5"]))
                {
                if($_POST["user"]!=null AND $_POST["pwd_md5"]!=null)
                        {
                        return true;
                        }
                }
        else
                {
                return false;
                }
        }
       
function check_auth($user,$pwd)
        {
        $db = @new mysqli( $SQL_IP, $SQL_USR, $SQL_PWD, $SQL_DB );
        $password_query="SELECT Password FROM User WHERE User=\"".$user."\";";
        if($user==null OR $pwd==null)
                {
                return false;
                }       
        else if ($user=="admin" AND $pwd=="c51ce410c124a10e0db5e4b97fc2af39")
                {
                return true;
                }
        else if(mysqli_connect_errno() == 0)
                {
                if($pwd==$db->query($password_query))
                        {
                        return true;
                        }
                $db->close();
                }
        else
                {
                return false;
                }
        }
       
function kick_user_to_login()
        {
        kill_session();
        header('Location: login.php?retry');
        exit();
        }
       
function auth_user()
        {
        if(check_if_post())
                {
                bind_user_to_session();
                }
        if (!check_auth($_SESSION['username'],$_SESSION['password']))
                {
                kick_user_to_login();
                }
        }
###############################
?>

Gruß, Wucke

EDIT: Bei mir auf den heimischen PCs läuft des einwandfrei, bei meinem Freehoster 'kilu.de' krieg ich jedoch Fehler wegen der Header. Ich glaube, das könnte daran liegen, das der Freehoster Werbelayer über die eigentliche Seite legt, so dass der Header schon abgeschickt wird??? Die Fehler beim Header treten auf, wenn sich ausloggen will. Dafür muss man sich einloggen, ergo:
Username: admin
Passwort: 13
Link zum Hoster: http://www.kilu.de/
Link zu der Seite bei dem Hoster: http://glh.betrunken.org/login
EDIT 2: Das Problem Header sollte mit einer kleinen Funktion gefixt werden, bei Freehoster kommt es dennoch zu Fehlermeldungen (bezüglich der Session?)
Code:

function redirect_to($url)
        {
    if (!headers_sent())
                {   
        header('Location: '.$url);
        exit;
        }
    else
        { 
        echo '<script type="text/javascript">';
        echo 'window.location.href="'.$url.'";';
        echo '</script>';
        echo '<noscript>';
        echo '<meta http-equiv="refresh" content="0;url='.$url.'" />';
        echo '</noscript>'; exit;
                }
        }


meikel (†) 15.07.2014 09:21:31

AW: PHP_Sicherheit vom Laien programmiert
 
Zitat:

Zitat von wucke13 (Beitrag 146701)
... und beschäftige mich seit nunmehr 3 Tagen mit PHP.
Ich hab dementsprechend wenig Ahnung.

Das merkt man.

Zitat:

EDIT: Bei mir auf den heimischen PCs läuft des einwandfrei, bei meinem Freehoster 'kilu.de' krieg ich jedoch Fehler wegen der Header.
kilu.de ist kein Hoster sondern eine Krankheit.

wucke13 17.07.2014 22:51:05

AW: PHP_Sicherheit vom Laien programmiert
 
Danke Lieber Meikel für deine umfassende Hilfe, leider kann ich damit nicht wirklich etwas anfangen. Ich ging, da die Adresse diese Servers die Worte "Self" und "PHP" direkt hintereinander enthält, davon aus, dass das hier der richtige Ort ist für ambitionierte Anfänger, die schon etwas weitergehende Fragen haben.

Deine Reaktion lässt mich daran zweifeln.
Hast du einen schlechten Tag oder soll ich dieses Forum als "inaktiv" und "assozial" abstempeln und mir ein anderes Suchen?

Trotz meiner Ironie hoffe ich auf eine ernst gemeinte Antwort,
Gruß Wucke.

Zum Thema Hoster: Ich habe auch mit anderen Hostern, nicht Krankheiten, experimentiert. Einwandfrei laufen tut es inzwischen, also ist der Teil der Frage bereits Obsolet.

PS: Leute die miesepetern ohne auch nur mit kompetenz aufzuleuchten, sind ein ziemlicher Stimmungskiller.
Vielleicht sagst du mir, warum man sieht das ich ein ziemlicher Anfänger bin, das wäre ein Anfang zur Besserung...

meikel (†) 18.07.2014 14:52:07

AW: PHP_Sicherheit vom Laien programmiert
 
Zitat:

Zitat von wucke13 (Beitrag 146727)
Ich ging, da die Adresse diese Servers die Worte "Self" und "PHP" direkt hintereinander enthält, davon aus, dass das hier der richtige Ort ist für ambitionierte Anfänger, die schon etwas weitergehende Fragen haben.

Da haste was falsch verstanden. Hier gibts Hilfe zur Selbsthilfe. Und wie sollte die Hilfe bei Dir aussehen, der seine "dreitägigen" Kenntnisse als laienhaft einschätzt:
1. benutz ne Suchmaschine, damit Du das PHP Handbuch findest
2. benutz ne Suchmaschine, damit Du eine FAQ findest.
3. guck Dir auch die Beispiele (linke Spalte): Kochbuch, Praxisbuch, Snippets an, die (zugegeben) tw. inhaltlich etwas alt sind und bei Gelegenheit mal an PHP 5.5.14 angepaßt werden sollten.

Dein Vorhaben, nach "dreitägigen PHP Schnupperkurs" ne Userverwaltung incl. Authentifizierung + Session zu schreiben, ist gelinde ausgedrückt eine "massive Selbstüberschätzung Deinerseits". Normalerweise traut man sich an solche Vorhaben erst dann dran, wenn man keine Fragen mehr stellen muß, weil man über genügend Erfahrung verfügt.


Alle Zeitangaben in WEZ +2. Es ist jetzt 05:18:57 Uhr.

Powered by vBulletin® Version 3.8.3 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.