Wolly300
Lieutenant
- Registriert
- Mai 2014
- Beiträge
- 520
Hallo zusammen,
ich weiß es ist Sonntag, aber anderen Tagen habe ich leider keine Zeit zum programmieren/lernen.
Also hier mein Problem:
Also ich teste gerade nur einmal das set_security_token().
Die Datenbank ist erstellt und auf meiner loginseite steht das :
Hier wird auch richtig der Wert 1 übergeben, in der neu erstellten Tabelle ist auch ein Datensatz mit ID 1.
Ich bekomme jetzt im Protokoll folgende Fehlermeldung:


So das ist das erste Problem.
Das Zweite Problem ist das:
:ID
Ich will das mit prepare machen, weil ich damit ja besser gegen injection geschützt bin. wie gebe ich das dann richtig im bind an ? weil so ist es falsch.
Danke für eure Hilfe
ich weiß es ist Sonntag, aber anderen Tagen habe ich leider keine Zeit zum programmieren/lernen.
Also hier mein Problem:
PHP:
<?php
require_once 'config.php';
class cookie {
function random_string() {
if(function_exists('random_bytes')) {
$bytes = random_bytes(16);
$str = bin2hex($bytes);
} else if(function_exists('openssl_random_pseudo_bytes')) {
$bytes = openssl_random_pseudo_bytes(16);
$str = bin2hex($bytes);
} else if(function_exists('mcrypt_create_iv')) {
$bytes = mcrypt_create_iv(16, MCRYPT_DEV_URANDOM);
$str = bin2hex($bytes);
} else {
$str = md5(uniqid('fh27fgv72ij4', true));
}
return $str;
}
function time () {
$timestamp = time();
$time = date("d.m.Y - H:i:s", $timestamp);
return $time;
}
function set_security_token($get_ID) {
$identifier = random_string();
$token = random_string();
$time = time();
$set = mysqli_prepare($mysqli, "UPDATE `securitytoken` SET `identifier` `token` `letztes_Update` WHERE `ID` = :ID;");
mysqli_stmt_bind_param($set, "sssi", $identifier, sha1($token), $time,'ID' => $get_ID);
mysqli_stmt_execute($set);
mysqli_stmt_close($set);
setcookie("identifier",$identifier,time()+(3600*6));
setcookie("token",$token,time()+(3600*6));
}
function check_security_token($get_ID, $get_identifier, $get_token) {
$search = mysqli_prepare($mysqli, "SELECT * FROM `securitytoken` WHERE `ID` = :ID AND `identifier` = :identifier;");
mysqli_stmt_bind_param($set, "is", 'ID' => $get_ID,'identifier' => $get_identifier);
mysqli_stmt_execute($search);
$DB_Values = mysqli_stmt_get_result($search);
if ($get_token !== sha1($DB_Values['token'])) {
die('Ein vermutlich gestohlener Security Token wurde identifiziert');
} else {
$token = random_string();
$time = time();
$set = mysqli_prepare($mysqli, "UPDATE `securitytoken` SET `token` `letztes_Update` WHERE `ID` = :ID;");
mysqli_stmt_bind_param($set, "ssi", sha1($token), $time,'ID' => $get_ID);
mysqli_stmt_execute($set);
mysqli_stmt_close($set);
setcookie("identifier",$get_identifier,time()+(3600*6));
setcookie("token",$token,time()+(3600*6));
}
}
}
?>
Also ich teste gerade nur einmal das set_security_token().
Die Datenbank ist erstellt und auf meiner loginseite steht das :
PHP:
$security = new cookie();
$security->set_security_token($user['id']);
Hier wird auch richtig der Wert 1 übergeben, in der neu erstellten Tabelle ist auch ein Datensatz mit ID 1.
Ich bekomme jetzt im Protokoll folgende Fehlermeldung:


So das ist das erste Problem.
Das Zweite Problem ist das:
PHP:
$set = mysqli_prepare($mysqli, "UPDATE `securitytoken` SET `identifier` `token` `letztes_Update` WHERE `ID` = :ID;");
mysqli_stmt_bind_param($set, "sssi", $identifier, sha1($token), $time,'ID' => $get_ID);
:ID
Ich will das mit prepare machen, weil ich damit ja besser gegen injection geschützt bin. wie gebe ich das dann richtig im bind an ? weil so ist es falsch.
Danke für eure Hilfe