aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--blob/database_schema9
-rwxr-xr-xwww/functions/func_login.php72
-rwxr-xr-xwww/setup.php2
3 files changed, 62 insertions, 21 deletions
diff --git a/blob/database_schema b/blob/database_schema
index e69de29..f83e2d9 100644
--- a/blob/database_schema
+++ b/blob/database_schema
@@ -0,0 +1,9 @@
+CREATE TABLE banned_user (id INTEGER PRIMARY KEY, login_attempts INTEGER, ip TEXT, session_id TEXT, time INTEGER, user INTEGER);
+
+CREATE TABLE jg(id INTEGER PRIMARY KEY, name TEXT, adresse TEXT, telefonnummer INTEGER, handynummer INTEGER, email TEXT, geburtstag TEXT);
+
+CREATE TABLE log (id INTEGER PRIMARY KEY, user INTEGER, login INTEGER, FOREIGN KEY(user) REFERENCES user(id));
+
+CREATE TABLE sprueche(id INTEGER PRIMARY KEY, spruch TEXT);
+
+CREATE TABLE user (id INTEGER PRIMARY KEY, name TEXT UNIQUE, password TEXT, email TEXT UNIQUE, status INTEGER, register INTEGER);
diff --git a/www/functions/func_login.php b/www/functions/func_login.php
index 3afb3d8..166c835 100755
--- a/www/functions/func_login.php
+++ b/www/functions/func_login.php
@@ -6,30 +6,53 @@ function login($db){
$password = $_POST["password"];
$safe_username = SQLite3::escapeString("$username");
- $pepper = file_get_contents("../database/pepper.txt");
- $password = $password . $pepper;
-
+ $log_in = false;
$real_password = "";
- $real_password_db = $db->query("SELECT password FROM user WHERE name='" . $safe_username . "';");
- while($real_password_array = $real_password_db->fetchArray(SQLITE3_NUM)){
- foreach($real_password_array as $secondelement){
- $real_password=$secondelement;
- }
- }
+ if($username == "Guest"){
+ $real_password_db = $db->query("SELECT email FROM jg");
+ while($row = $real_passsword_db->fetchArray(SQLITE3_NUM)){
+ if($row[0] == $password){
+ $log_in = true;
+ break;
+ }
+ }
+ } else {
+ $pepper = file_get_contents("../database/pepper.txt");
+ $password = $password . $pepper;
+
+ $real_password_db = $db->query("SELECT password FROM user WHERE name='" . $safe_username . "';");
+ while($real_password_array = $real_password_db->fetchArray(SQLITE3_NUM)){
+ foreach($real_password_array as $secondelement){
+ $real_password=$secondelement;
+ }
+ }
+
+ if (!password_verify($password, $real_password)) {
+ $log_in = true;
+ }
+ }
/*___Login___*/
- if (!password_verify($password, $real_password)) {
+ if(!$log_in){
return LOGIN_PASSWORD;
}
-
+
+ $id = user_id($db, $username);
+ $banned_db = $db->query("SELECT 1 FROM banned_user WHERE user=".$id);
+ $banned_ar = $banned_db->fetchArray(SQLITE3_NUM);
+
+ if($banned_ar[0] == 1){
+ echo "You are banned. ;_;";
+ exit;
+ }
+
if($db->exec("
BEGIN TRANSACTION;
INSERT INTO log (id, user, login) VALUES (NULL, (SELECT id FROM user WHERE name='" . $username . "'), (SELECT strftime('%s', 'now')));
COMMIT;
")){
- $id = user_id($db, $username);
$_SESSION["login"] = true;
$_SESSION["username"] = $username;
@@ -54,32 +77,41 @@ function logout(){
function brutforce_protection($db){
$_SESSION["login_attempts"] = $_SESSION["login_attempts"] - 1;
+ $remote_ip = $_SERVER["REMOTE_ADDR"];
+ $session_id = session_id();
+ $time = $_SERVER["REQUEST_TIME"];
+
if($_SESSION["login_attempts"] <= 0){
- $remote_ip = $_SERVER["REMOTE_ADDR"];
- $session_id = session_id();
- $time = $_SERVER["REQUEST_TIME"];
-
if($db->exec("
BEGIN TRANSACTION;
- INSERT INTO banned_user (id, ip, session_id, time) VALUES (NULL, '".SQLite3::escapeString($remote_ip)."', '".SQLite3::escapeString($session_id)."', ".$time.");
+ INSERT INTO banned_user (id, login_attempts, ip, session_id, time) VALUES (NULL, ".$_SESSION["login_attempts"].", '".SQLite3::escapeString($remote_ip)."', '".SQLite3::escapeString($session_id)."', ".$time.");
COMMIT;
")){
echo "You are banned. ;_;";
}
exit;
+ } else {
+ if($db->exec("
+ BEGIN TRANSACTION;
+ INSERT INTO banned_user (id, login_attemps, ip, session_id) VALUES (NULL, ".$_SESSION["login_attempts"].", ".$db->escapeString($remote_ip).", '".SQLite3::escapeString($session_id)."');
+ COMMIT;
+ "))
}
}
function check_if_banned($db){
-
$remote_ip = $_SERVER["REMOTE_ADDR"];
$session_id = session_id();
- $check_db = $db->query("SELECT time FROM banned_user WHERE ip='".SQLite3::escapeString($remote_ip)."' OR session_id='".SQLite3::escapeString($session_id)."';");
+ $check_db = $db->query("SELECT time, login_attempts, id FROM banned_user WHERE ip='".SQLite3::escapeString($remote_ip)."' OR session_id='".SQLite3::escapeString($session_id)."';");
$check_ar = $check_db->fetchArray(SQLITE3_NUM);
+ $log_at = $check_ar[1];
+ $_SESSION["login_attempts"] = $log_at;
+
$accepted_time = $_SERVER["REQUEST_TIME"] - 21600; // == 6h
+ $db->exec("DELETE FROM banned_user WHERE time<'".$accepted_time."'");
- if($check_ar[0] < $accepted_time){
+ if($log_at == 0 && ($check_ar[0] < $accepted_time)){
return false; // not longer banned
} else {
return true; // still banned
diff --git a/www/setup.php b/www/setup.php
index 3e8ca76..7b691df 100755
--- a/www/setup.php
+++ b/www/setup.php
@@ -55,7 +55,7 @@ if($bool){
CREATE TABLE IF NOT EXISTS user (id INTEGER PRIMARY KEY, name TEXT UNIQUE, password TEXT, email TEXT UNIQUE, status INTEGER, register INTEGER);
INSERT INTO user (id, name, status, password, email, register) VALUES (NULL, 'admin', 0, '" . $hash_password . "', '" . $email . "', (SELECT strftime('%s', 'now')));
CREATE TABLE IF NOT EXISTS log (id INTEGER PRIMARY KEY, user INTEGER, login INTEGER, FOREIGN KEY(user) REFERENCES user(id));
- CREATE TABLE IF NOT EXISTS banned_user (id INTEGER PRIMARY KEY, ip TEXT, session_id TEXT, time INTEGER);
+ CREATE TABLE IF NOT EXISTS banned_user (id INTEGER PRIMARY KEY, login_attempts INTEGER, ip TEXT, session_id TEXT, time INTEGER, user INTEGER);
CREATE TABLE IF NOT EXISTS jg(id INTEGER PRIMARY KEY, name TEXT, adresse TEXT, telefonnummer INTEGER, handynummer INTEGER, email TEXT, geburtstag TEXT);
CREATE TRIGGER IF NOT EXISTS delete_files AFTER DELETE ON user FOR EACH ROW BEGIN DELETE FROM files WHERE owner=OLD.id; END;
COMMIT;")