PHP Forum

PHP Forum (http://www.selfphp.de/forum/index.php)
-   PHP Entwicklung und Softwaredesign (http://www.selfphp.de/forum/forumdisplay.php?f=14)
-   -   Sicherheit einer Website (http://www.selfphp.de/forum/showthread.php?t=23796)

Leaderred 26.11.2010 15:10:33

Sicherheit einer Website
 
Hallo zusammen,

bin neu hier im Forum und hoffe das mir jemand von euch ein paar Fragen beantworten kann. Hab vor ca. 1 Monat mit der Programmierung meiner Website in HTML und PHP mit einer MySQL Datenbank angefangen. Noch läuft alles über XAMP, später soll die Seite aber auch ins Netz. Deswegen ist jetzt meine Frage, was man bei der Sicherheit beachten muss.

Eingebaut habe ich bis jetzt nur ein Loginscript mit MD5 Passwort Verschlüsselung. Da die website jede Menge Adressdaten und Kontakte enthalten wird, sollte es Unbefungten nicht ohne weiteres möglich sein auf die Daten zuzugreifen. Vielleicht noch zur Info, die Seite wird nicht öffentlich und ist nur für einen begrenzten Benutzerkreis gedacht. sollte also nicht bei Google etc auftauchen.

1. Reicht so ein Login um meine Seite zu schützen?
2. Muss ich meine Daten zwangsweise nochmal mit AES oder sonstwas verschlüssel, damit die Hoster der MySQL DB die Daten nicht im Klartext sehen können?
3. ich hab bau die Verbindung zur Datenbank in einer Header Datei auf, ist das unsicherer als wenn ich die Verbindung vor jedem Zugriff einzel herstelle?

Entschuldigt bitte wenn das doofe Fragen sind oder das hier nicht ganz das richtige Forum ist. Hab mir schon eine Menge Beiträge bei Google rausgesucht, aber meistens werd ich da nicht schlau draus, weil es für die meisten wohl selbstverständliche Fakten sind.

Vielen Dank schonmal für eure Hilfe oder Infos

Gruß

Ckaos 26.11.2010 17:18:30

AW: Sicherheit einer Website
 
Hi

Zitat:

Zitat von Leaderred (Beitrag 139326)
Hab vor ca. 1 Monat mit der Programmierung meiner Website...... Da die website jede Menge Adressdaten und Kontakte enthalten wird, sollte es Unbefungten nicht ohne weiteres möglich sein auf die Daten zuzugreifen

Das ist keine gute kombination ;)

Zitat:

1. Reicht so ein Login um meine Seite zu schützen?
2. Muss ich meine Daten zwangsweise nochmal mit AES oder sonstwas verschlüssel, damit die Hoster der MySQL DB die Daten nicht im Klartext sehen können?
3. ich hab bau die Verbindung zur Datenbank in einer Header Datei auf, ist das unsicherer als wenn ich die Verbindung vor jedem Zugriff einzel herstelle?
zu 1. Wenn der Login durchdacht ist vielleicht (ohne Code Bsp schwer zu sagen)
zu 2. Glaube deine Hoster haben anderes zu tun als datenbanken nach Daten zu durchstöbern ;) (ausser es is vielleicht dein Nachbar den du eh nicht traust)
zu 3. unrelevant Hauptsache du baust sie sicher auf ;)


vielleicht solltest du dir folgendes anschauen --> (nette keine allgemeinen) tips zur Sicherheit

mfg

CKaos

cortex 26.11.2010 17:25:25

AW: Sicherheit einer Website
 
Zitat:

Zitat von Leaderred (Beitrag 139326)
1. Reicht so ein Login um meine Seite zu schützen?

das login selbst ist keine raketenwissenschaft. interessant wird's beim thema session-handling, erkennung + abwehr von hackings, fehlerprotokollierung, zurücksetzen von (verlorenen) passworten etc.

Zitat:

Zitat von Leaderred (Beitrag 139326)
2. Muss ich meine Daten zwangsweise nochmal mit AES oder sonstwas verschlüssel, damit die Hoster der MySQL DB die Daten nicht im Klartext sehen können?

geschmackssache. imho zuviel des guten; kostet bspw. rechenpower. man muss aufwand, nutzen und risiko gegeneinander abwägen.

Zitat:

Zitat von Leaderred (Beitrag 139326)
3. ich hab bau die Verbindung zur Datenbank in einer Header Datei auf, ist das unsicherer als wenn ich die Verbindung vor jedem Zugriff einzel herstelle?

keine ahnung, wovon du sprichst...

Zitat:

Zitat von Leaderred (Beitrag 139326)
Entschuldigt bitte wenn das doofe Fragen sind oder das hier nicht ganz das richtige Forum ist.

passt schon... ich verschiebe das thema jedoch in ein anderes unterforum.

links / quellen:

cms-sicherheit.de
Gesundes Misstrauen - Sicherheit von Webanwendungen
Security tips for web developers

darüber hinaus ist dieses buch sehr empfehlenswert.

cx

Leaderred 26.11.2010 18:47:19

AW: Sicherheit einer Website
 
Vielen Dank für die Antwort. also nicht falsch verstehen, ich brauch keien Hoch Sicherheits Seite, alle Leute die sich da einloggen kenne ich, es muss also nur das Login passen, die Verbindung zur DB sicher sein und halt die Frage mit dem Hoster, aber das scheint ja nicht so das Problem zu sein ;)


Hier mal mein Code (wenn ich das so posten darf)



Login Seite:
PHP-Code:

session_start();
include_once(
'sessionhelpers.inc.php'); 


//ABMELDUNG RAHMEN
echo "<form method='post' action='index.php'>";
echo 
"<TD CLASS=TABLEHEADER1>";
echo 
"<SPAN ID=BLACK2>Sie sind nicht mehr angemeldet</SPAN><br><br>";
echo 
"<input type='submit'value='Zum Anmeldebildschirm'>";
echo 
"</form>";
echo 
"</TD>";

$_SESSION = array();
logout(); 
}

if ( isset(
$_POST['login']) ) 
{
    
$userid check_user($_POST['username'], $_POST['userpass']);
    if ( 
$userid 
    { 
    
login($userid); 
    
    
$sqlab  "select UserID,UserLogin,UserDBName,UserNName,UserVName,UserPer,UserStatus from users where UserLogin = '$_REQUEST[username]'";
       
$res mysql_db_query(DBNAME$sqlab);
    
$num mysql_num_rows($res);
    if (
$num==0) { }
    while(
$row mysql_fetch_array($res)) {
        
    if (isset(
$row[UserID])) { $_SESSION[UserID] = $row[UserID]; }
    if (isset(
$row[UserLogin])) { $_SESSION[UserLogin] = $row[UserLogin]; }
    if (isset(
$row[UserDBName])) { $_SESSION[UserDBName] = $row[UserDBName]; }
    if (isset(
$row[UserNName])) { $_SESSION[UserNName] = $row[UserNName]; }
    if (isset(
$row[UserVName])) { $_SESSION[UserVName] = $row[UserVName]; }
    if (isset(
$row[UserPer])) { $_SESSION[UserPer] = $row[UserPer]; }
    if (isset(
$row[UserStatus])) { $_SESSION[UserStatus] = $row[UserStatus]; }
    }
    
    echo 
"<script language=\"javaScript\">top.document.location='$php_self'</script>";
    }
    else { echo 
'<script type="text/javascript">alert("Bitte Anmeldedaten prüfen!");</script>'; }
}

if ( !
logged_in() ) {
    
echo 
"<form method='post' action='$php_self'>";

//ANMELDUNG RAHMEN
echo "<TD CLASS=TABLEHEADER1>";
echo 
"<SPAN ID=BLACK2>Sie sind nicht angemeldet</SPAN><br><br>";
echo 
"<SPAN ID=BLACK2>Benutzername:</SPAN> <input name='username' type='text'>";
echo 
"<SPAN ID=BLACK2>Password:</SPAN> <input name='userpass' type='password' id='userpass'><br><br>";
echo 
"<input name='login' type='submit' id='login' value='Anmelden'>";
echo 
"</form>";
echo 
"</TD>";
}



if ( 
logged_in() ) 
{

//Geschützter Inhalt




sessionhelper Datei fürs Login System
PHP-Code:

<?php


/**
 * @return void
 */
function connect () { 
    
$con mysql_connect('localhost''root''root') or exit(mysql_error());
    
mysql_select_db('gebiet'$con) or exit(mysql_error());
}


/**
 * @param string $name
 * @param string $pass
 * @return boolean
 */
function check_user $name$pass ) {
    
// magic quotes anpassen
    
if ( get_magic_quotes_gpc() ) {
        
$name stripslashes($name);
        
$pass stripslashes($pass);
    }
    
// escapen von \x00, \n, \r, \, ', " und \x1a
    
$name mysql_real_escape_string($name);
    
// escapen von % und _
    
$name str_replace('%''\%'$name);
    
$name str_replace('_''\_'$name);

    
$sql 'SELECT UserId FROM users WHERE UserLogin = \'' $name '\' AND UserPass=\'' md5($pass) . '\'';
    if ( !
$result mysql_query($sql) ) {
        exit(
mysql_error());
    }
    if ( 
mysql_num_rows($result) == ) {
        
$user mysql_fetch_assoc($result);
        return ( 
$user['UserId'] );
    } else {
        return ( 
false );
    }
}


/**
 * @param int $userid
 * @return void
 */
function login $userid ) {
    
$sql 'UPDATE users SET UserSession = \'' session_id() . '\' WHERE UserId = ' . ((int)$userid);
    if ( !
mysql_query($sql) ) {
        exit(
mysql_error());
    }
}


/**
 * @return boolean
 */
function logged_in () { 
    
$sql 'SELECT UserId FROM users WHERE UserSession = \'' session_id() . '\'';
    if ( !
$result mysql_query($sql) ) {
        exit(
mysql_error());
    }
    return (
mysql_num_rows($result) == 1);
}


/**
 * @return void
 */
function logout () { 
    
$sql 'UPDATE users SET UserSession = NULL WHERE UserSession = \'' session_id() . '\'';
    if ( 
mysql_query($sql) ) {
        exit(
mysql_error());
    }
}

connect();

?>


Datenbankverbindung
PHP-Code:

<?
define('DBHOST', 'localhost');
define('DBUSER', 'root');
define('DBPASSWORD', 'root');
define('DBNAME', 'gebiet');

mysql_connect(DBHOST, DBUSER, DBPASSWORD);
?>


cortex 27.11.2010 12:03:58

AW: Sicherheit einer Website
 
ich weiss ehrlich gesagt nicht, wie ich dir an dieser stelle weiterhelfen könnte; denkanstösse und lesenswerte quellen wurden dir bereits genannt. als antwort knallst du mir irgendeinen (veralteten) code vor die füsze, den du irgendwo im netz aufgegabelt hast... prima.

für mich persönlich ist das thema damit beendet.

cx

DokuLeseHemmung 27.11.2010 13:06:06

AW: Sicherheit einer Website
 
Aber ich sage da mal was zu:
1. exit akzeptiert nur numerische Werte.
2. Die Sesion_Id in $_SESSION zu speichern ist völlig Sinn frei

Und warum da die DB Verbindung auf 2 verschiedenen Wegen aufgebaut werden muss, werde ich sicherlich nie verstehen.

Leaderred 27.11.2010 14:22:07

AW: Sicherheit einer Website
 
Das ist der Code den ich benutze. Den Login hab ich nicht selber geschrieben, sondern hab das Script das ich gefunden habe auf meine Seite angepasst. Was ist daran das Problem?

Bin kein Profi Programmierer sondern habe mir alles stück für stück zusammengesucht und erarbeitet. Bin froh das alles schonmal so läuft wie es soll. Jetzt gehe ich hin und optimiere die einzelnen Scripte. Kann ja nicht jeder direkt Vollprofi sein.

Hab mir die Links auch schon angeschaut und durchgelesen, werde acuh versuchen das so umzusetzen. Nur fast jede Seite im Netz gibt zB einen anderen Weg an, wie man eine Verbindung zur DB aufbaut. Hab dann eine genommen und mich gefreut das es funktioniert hat.

Deswegen wäre ich jetzt dankbar dafür, wenn ihr mir zumindest sagen könntet, was "veraltet" ist und wo noch was überarbeitet werden muss.


@cortex
Das mit dem Quellcode war nicht direkt für dich gedacht sondern für deinen Vorredner der nach meinem Code gefragt hatte. Bin dir für deine Tipps dankbar und werde sie versuchen umzusetzen.


Zum Thema Loginscript und Code im Netz aufgegabelt:
hab mir dazu zich Seiten durchgelesen und dieser Code schien mir davon noch am sinnvollsten, da er preaktisch auch ganz gut funktioniert. Vielleicht hab ich auch nach den falschen Themen gesucht, kann sein, deswegen gibs doch aber Foren wo einem die Leute wenigstens die richtige Richtung zeigen können.



@DokuLeseHemmung
das mit der Verbindung muss ich noch überarbeiten, die sessionhelper war vom Loginscript, die andere von mir die ich vorher hatte, werds aber noch in eine Datei packen, da es bis jetzt auch so ging.
Wieso ist 2. sinnfrei? Wie speichert man denn sonst eine laufende Session? gibs da andere Funktionen für?

DokuLeseHemmung 27.11.2010 14:43:07

AW: Sicherheit einer Website
 
Zitat:

Wieso ist 2. sinnfrei?
Weils keine Sinn hat.

Nenne mir bitte nur einen einzigen Grund warum du das tun willst.

cortex 27.11.2010 14:58:42

AW: Sicherheit einer Website
 
Zitat:

Zitat von Leaderred (Beitrag 139355)
Was ist daran das Problem?

der ehrlichkeit halber sollte das von anfang an gesagt werden; ich denke, das gehört sich so. dazu auch nochmal ein hinweis auf unsere forenregeln, insbes. punkt c.

Zitat:

Zitat von Leaderred (Beitrag 139355)
Bin kein Profi Programmierer

das ist nicht schlimm.

Zitat:

Zitat von Leaderred (Beitrag 139355)
habe mir alles stück für stück zusammengesucht und erarbeitet [...] Jetzt gehe ich hin und optimiere die einzelnen Scripte.

und hast du auch verstanden, was du da zusammenkopiert und auf dein problem angepasst hast?

Zitat:

Zitat von Leaderred (Beitrag 139355)
Hab dann eine genommen und mich gefreut das es funktioniert hat.

und jetzt möchtest du gern, dass wir den code evaluieren bzw. refaktorisieren?

Zitat:

Zitat von Leaderred (Beitrag 139355)
deswegen gibs doch aber Foren wo einem die Leute wenigstens die richtige Richtung zeigen können.

richtig. das heisst imho allerdings nicht, komplette quellcodes zu analysieren. das ist - wie gesagt - meine persönliche meinung; es gibt auch leute, die machen das - für mich unverständlich - gern. unser anliegen ist hilfe zur selbsthilfe, nicht kostenloser support für die (php-)probleme dieser welt. wenn hier leute aufschlagen, die im rahmen ihres jobs (für den sie sicher bezahlt werden) komplexe probleme zur disposition stellen, läuft irgendwas schief. ich bin nicht der einzige, der sich in so einer situation stark zusammenreissen muss.

Zitat:

Zitat von Leaderred (Beitrag 139355)
Wieso ist 2. sinnfrei? Wie speichert man denn sonst eine laufende Session? gibs da andere Funktionen für?

du bringst hier einiges durcheinander... die frage nach der sinnhaftigkeit (siehe session_id) korreliert nicht mit der frage, wie man eine session speichert. (thema: session-management; siehe oben). belies' dich am besten selbst: Session-Funktionen.

nochmal zusammenfassend: arbeite ein paar anständige tutorials durch und sammle eigene (!) erfahrungen. bei konkreten problemen / fragen bist du hier herzlich willkommen.

cx

Leaderred 27.11.2010 15:41:50

AW: Sicherheit einer Website
 
ok danke für eure offene Meinung.

das mit dem Quellcode wusste ich nicht, sorry nochmal dafür.

verstehe meistens schon, was die einzelnen Scripte machen, nur da ich sie nicht von mir aus selber aufbauen kann weil wir da einfach die Erfahrung und das Wissen zu fehlt, hab ich mir die Scripte kopiert und dann Stück für Stück angepasst, da sie unter anderem mir neue Funktionen enthalten.

Wollte nicht das ihr meinen Quellcode überarbeitet. Ist ein rein privates Projekt für mich, an dem ich mein PHP/MySQL Wissen testen und erweitern will. Finde stuhres abarbeiten von Tutorials ziehmlich öde, weil man kein Ziel hat. Ich probier, neue Sache direkt in die Seite einzuarbeiten und sehe dann ja ob funktioniert hat.

Solagen alles läuft sehe ich dann keine Fehler darin. Ich kann ja selber nicht einschätzen ob der Code veraltet ist, weil ich keinen Vergleich habe. Dachte nur das ihr mir als erfahrene Programmierer sagen könnt, ob das so ok und sicher ist, oder ob ich noch was ändern muss. Habe nicht erwartet das ihr mir den Code korrigiert, das war nicht der Grund warum ich hier schreibe

Werd mich dann nochmal anlesen und einiges überarbeiten.

Vielen Dank für eure Zeit, wenn ich was konkretes habe komme ich nochmal auf euch zurück (wenn ihr dann noch wollt :P )


@DokuLeseHemmung
keine Ahnung, mach mich da auch nochmal schlau


EDIT:
danke für die Links, genau solche Infos hab ich gesucht :)


Alle Zeitangaben in WEZ +2. Es ist jetzt 10:58:48 Uhr.

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