Hi, ich bin was Sicherheit angeht ein absoluter Neuling.
Habe die letzten Tage das erste mal versucht einen Login "absolut" Sicher zu Programmieren, da ich einen Login benötige der das maximum an Sicherheit bietet.
So jetzt ein Post der eher für die härteren ist... Aber wenn dann richtig******
Vorerst zur Struktur. Ich hoffe meine Projectstruktur ist leicht zuverstehen:
../
Alle Ordner bis auf die CSS Ordner enthalten IMMER 3 Datein.
1. .htaccess (Order deny,allow Deny from all)
2. index.php und index.html
beide enthalten:
Das war mein Versuch alles vor einem "oberflächlichem" Zugriff zu schützen. Somit ist kein Ordner aufrufbar und keine Datei die in dem Ordner enthalten ist.
Darüber hinaus ist jede .php Datei nocheinmal am Anfang mit einem code geschützt, der es nicht erlaubt die .php alleine aufzurufen, sondern nur ein include über die index.php zulässt.
Das Project enthält bis jetzt:
Das ist wie folgt realisiert:
der Ordner VIEW welcher sich an der Oben genannten Stelle in /public_html/projectname/view befindet, enthält die Formulare.
REGISTER
LOGIN
LOGOUT
Diese Formulare rufen die Index.php auf über die sie included wurden.
Die index.php enthält wie oben gezeigt den Code "require_once '../../processes/package_user/package_user_processes.php';"
Darin sind die .php Datein die die Anfrage der Formulare verarbeiten.
die .php Datein liegen im Ordner /processes und sind nicht über das Webinterface aufrufbar.
jedes Formular hat eine Datei die den Prozess verarbeitet und auch auf ungültige eingaben überprüft, sowie einen Fehler an den User ausgibt wenn etwas nicht stimmt.
REGISTER
LOGIN
LOGOUT
Ist die Eingabe O.K. wird die jeweilige Funktion der Klasse aufgerufen, die dann den Eintrag in die Datenbank vornimmt oder Überprüft ob der User in der der Datenbank ist sowie das Passwort verschlüsselt usw.
Dafür gibt es 3 Klassen:
SQLconfig.php enthält die SQL config Datein.
SecurityHandler.php verschlüsselt Passwörter Kontolliert eingaben usw.
user.php alles was mit dem User zu tun hat (user speichern, DB abrufen, einloggen usw.)
Aus Übersichtsgründen kommen die Klassen im nächsten Post....
Habe die letzten Tage das erste mal versucht einen Login "absolut" Sicher zu Programmieren, da ich einen Login benötige der das maximum an Sicherheit bietet.
So jetzt ein Post der eher für die härteren ist... Aber wenn dann richtig******
Vorerst zur Struktur. Ich hoffe meine Projectstruktur ist leicht zuverstehen:
../
aliases enthält die defines
classes enthält die Klassen
processes enthält die processe und ruft die KlassenFunktionen auf
public_html Ordner der vom Webserver als "root" gesehen wird und im www erreichbar ist
classes enthält die Klassen
processes enthält die processe und ruft die KlassenFunktionen auf
public_html Ordner der vom Webserver als "root" gesehen wird und im www erreichbar ist
projectname
css enthält die css datein
view enthält die formulare bzw. das was zu sehen ist
index.php ruft klassen auf und bindet die benötigten datein ein
view enthält die formulare bzw. das was zu sehen ist
index.php ruft klassen auf und bindet die benötigten datein ein
Alle Ordner bis auf die CSS Ordner enthalten IMMER 3 Datein.
1. .htaccess (Order deny,allow Deny from all)
2. index.php und index.html
beide enthalten:
HTML:
<html>
<head>
<title>ACCESS DENIED</title>
<meta HTTP-EQUIV="REFRESH" content="0; url=http://www.xy.de/" />
</head>
<body></body>
</html>
Das war mein Versuch alles vor einem "oberflächlichem" Zugriff zu schützen. Somit ist kein Ordner aufrufbar und keine Datei die in dem Ordner enthalten ist.
Darüber hinaus ist jede .php Datei nocheinmal am Anfang mit einem code geschützt, der es nicht erlaubt die .php alleine aufzurufen, sondern nur ein include über die index.php zulässt.
Das Project enthält bis jetzt:
- Die Möglichkeit sich zu registrieren
- Die Möglichkeit sich einzuloggen
- Die Möglichkeit sich auszuloggen
Das ist wie folgt realisiert:
der Ordner VIEW welcher sich an der Oben genannten Stelle in /public_html/projectname/view befindet, enthält die Formulare.
REGISTER
PHP:
<?php
defined( '_UEBERINDEX' ) or die( header('location: http://xy.de/') );
if(!isset($_SESSION['usr_id'])){ ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" id="registerForm" method="POST" class="registerForm">
<span class="registerForm">email</span> <input type="text" name="reg_email" size="10" maxlength="25" class="registerForm" />
<span class="registerForm">passwort</span> <input type="password" name="reg_pass" size="10" maxlength="25" class="registerForm" />
<input type="submit" name="formsubmit_registerForm" value="register" class="registerForm" />
</form>
<?php } ?>
LOGIN
PHP:
<?php
defined( '_UEBERINDEX' ) or die( header('location: http://xy.de/') );
if(!isset($_SESSION['usr_id'])){ ?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" id="loginForm" method="POST" class="loginForm">
<span class="loginForm">email</span> <input type="text" name="login_email" size="10" maxlength="25" class="loginForm" value="" />
<span class="loginForm">passwort</span> <input type="password" name="login_pass" size="10" maxlength="25" class="loginForm" value="" />
<input type="submit" name="formsubmit_loginForm" value="login" class="loginForm" />
</form>
<?php } ?>
LOGOUT
PHP:
<?php
defined( '_UEBERINDEX' ) or die( header('location: http://xy.de/') );
if(isset($_SESSION['usr_id'])){ ?>
<form action="<?php $_SERVER['PHP_SELF']; ?>" id="registerForm" method="POST">
<input type="hidden" name="logout" value="1">
<input type="submit" name="formsubmit_logoutForm" value="logout" />
</form>
<?php } ?>
Diese Formulare rufen die Index.php auf über die sie included wurden.
PHP:
<?php
session_start();
define( '_UEBERINDEX', 1 );
//ALLE DATEN SHCON HIER AUFBEREITEN
require_once '../../classes/user.php';
require_once '../../classes/SQLconfig.php';
require_once '../../classes/SecurityHandler.php';
require_once '../../aliases/aliases.php';
$user = new User;
$security = new SecurityHandler();
$dbconn = new OIConf();
$dbconn->connect();
require_once '../../processes/package_user/package_user_processes.php';
if(isset($_SESSION['usr_id'])){$security->save_session();}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title></title>
<?php include 'css/style.php'; ?>
</head>
<body>
<span style="color:red;">
<?php
foreach($_SESSION as $k => $v){
if($k == 'error'){
foreach($v as $vk => $vv){
echo $vv.'<br>';}
}
}
unset($_SESSION['error']);
?></span>
<div id="top"></div>
<div id="left">
<?php
echo $security->isUserLoggedin();
include "view/package_user/module_logout/logoutForm.php";
echo '<br />';
include "view/package_user/module_register/registerForm.php";
echo '<br />';
include "view/package_user/module_login/loginForm.php";
?></div>
<div id="middle"></div>
<div id="right"></div>
</body>
</html>
<?php $dbconn->disconnect();
?>
Die index.php enthält wie oben gezeigt den Code "require_once '../../processes/package_user/package_user_processes.php';"
Darin sind die .php Datein die die Anfrage der Formulare verarbeiten.
die .php Datein liegen im Ordner /processes und sind nicht über das Webinterface aufrufbar.
jedes Formular hat eine Datei die den Prozess verarbeitet und auch auf ungültige eingaben überprüft, sowie einen Fehler an den User ausgibt wenn etwas nicht stimmt.
REGISTER
PHP:
<?php
defined( '_UEBERINDEX' ) or die( header('location: http://xy.de/') );
if(isset($_POST['formsubmit_registerForm'])){
if(strlen($_POST['reg_pass'])< 6){
$_SESSION['error']['001'] = SESSION_ERROR01;
$confirmprocess = false;
}
if(strlen($_POST['reg_pass'])> 20){
$_SESSION['error']['002'] = SESSION_ERROR02;
$confirmprocess = false;
}
if(strlen($_POST['reg_email'])< 6){
$_SESSION['error']['003'] = SESSION_ERROR03;
$confirmprocess = false;
}
if(strlen($_POST['reg_email']) > 50){
$_SESSION['error']['004'] = SESSION_ERROR04;
$confirmprocess = false;
}
if(!isset($confirmprocess)){
$checkMail = $security->stringControl($_POST['reg_email']);
$checkPass = $security->stringControl($_POST['reg_pass']);
$checkMail = $security->checkemail($checkMail);
if($checkMail != false && $checkPass != false && !isset($_SESSION['user_id'])){
$ver_passwort = $security->verschluesseln($checkPass);
$user->set_email($checkMail);
$user->quick_save_user($ver_passwort, $security->getSalt());
echo 'regestriert! als '.$user->get_email().'';
}
elseif(!$checkMail){
$_SESSION['error']['005'] = SESSION_ERROR05;
}
elseif(!$checkPass){
$_SESSION['error']['006'] = SESSION_ERROR06;
}
elseif(isset($_SESSION['user_id'])){
$_SESSION['error']['007'] = SESSION_ERROR07;
}
else{
$_SESSION['error']['000'] = SESSION_ERROR00;
}
}
}
?>
LOGIN
PHP:
<?php
defined( '_UEBERINDEX' ) or die( header('location: http://xy.de/') );
if(isset($_POST['formsubmit_loginForm']) == 'login'){
$checkPass = $security->stringControl($_POST['login_pass']);
$checkMail = $security->stringControl($_POST['login_email']);
if($checkMail != false && $checkPass != false){
$user->get_user($checkMail,$checkPass);
}
elseif(!$checkMail){
$_SESSION['error']['001'] = SESSION_ERROR01;
}
elseif(!$checkPass){
$_SESSION['error']['002'] = SESSION_ERROR02;
}
else{
$_SESSION['error']['000'] = SESSION_ERROR00;
}
}
?>
LOGOUT
PHP:
<?php
defined( '_UEBERINDEX' ) or die( header('location: http://xy.de/') );
if($_POST['logout'] == 1){
$_SESSION = array();
if($_COOKIE['session_name()']){
setcookie(session_name(), '', time()-42000, '/');
}
session_unset();
session_destroy();
header('location: /connectionplattform/index.php');
}
?>
Ist die Eingabe O.K. wird die jeweilige Funktion der Klasse aufgerufen, die dann den Eintrag in die Datenbank vornimmt oder Überprüft ob der User in der der Datenbank ist sowie das Passwort verschlüsselt usw.
Dafür gibt es 3 Klassen:
SQLconfig.php enthält die SQL config Datein.
SecurityHandler.php verschlüsselt Passwörter Kontolliert eingaben usw.
user.php alles was mit dem User zu tun hat (user speichern, DB abrufen, einloggen usw.)
Aus Übersichtsgründen kommen die Klassen im nächsten Post....
Zuletzt bearbeitet: