Cześć wszystkim, ostatnio pewna osoba której bardzo dziękuje pokazała mi błąd w moim kodzie PHP. Zajrzałem do dokumentacji i wywnioskowałem następujące wnioski, iż do poprawnego prepare trzeba podstawić wartości za pomocą bind(). Czy Była by dobra duszyczka i sprawdziła czy wszystko dobrze zrobiłem oraz wysłałem przykładowy kod logowania oraz pokazywania jakiś informacji i czy również jest to zrobione w bezpieczny sposób? Czy też mam coś pozmieniać. Z góry dziękuje (IMG:
style_emoticons/default/smile.gif)
Kod z błędem:
<?php
require '../funkcje/database_connect/dbsoft.php';
$sql = "INSERT INTO `database` (nazwisko, imie)
VALUES ('{$_POST['1']}', '{$_POST['2']}')";
$statement = $connection->prepare($sql);
if (!$statement) {
echo "\nPDO::errorInfo():\n"; }
if ($statement->execute()) {
echo '<p class="text-success">Pozytywnie dodano osobę</p>';
}
?>
Kod poprawiony:
<?php
require '../funkcje/database_connect/dbsoft.php';
$sql = "INSERT INTO `database` (nazwisko, imie)
VALUES (:surname, :name)";
$statement = $connection->prepare($sql);
$statement->bindParam(':name', $_POST['2'], PDO::PARAM_STR);
$statement->bindParam(':surname', $_POST['1'], PDO::PARAM_STR);
if (!$statement) {
echo "\nPDO::errorInfo():\n"; }
if ($statement->execute()) {
echo '<p class="text-success">Pozytywnie dodano osobę</p>';
}
$statement->execute();
?>
Kod logowania:
<?php
require '../database_connect/dbsoft.php';
$email= $_POST['email'];
$password = $_POST['password'];
$sekret = "XXXXXXXXXXXXXXXXXXXXXXXXX";
$sprawdz = file_get_contents('https://www.google.com/recaptcha/api/siteverify?secret='.$sekret.'&response='.$_POST['g-recaptcha-response']);
$odpowiedz = json_decode($sprawdz);
if ($odpowiedz->success==false)
{
$_SESSION['e_bot']="Potwierdź, że nie jesteś botem!";
header('Location: ../login.php'); }
$sql = 'SELECT * FROM account WHERE email="'.$email.'"';
$statement = $connection->prepare($sql);
$statement->execute();
$oz = $statement->rowCount();
if($oz>0){
$row = $statement->fetchAll(PDO::FETCH_OBJ);
foreach($row as $rows):
$password_base = $rows->password;
$email = $rows->email;
$id_base = $rows->id;
endforeach;
if (password_verify($password, $password_base))
{
$_SESSION['verify'] = true;
$_SESSION['id_session'] = $id_base;
function random(int $i)
{
}
$code = random(35);
$time = date("Y-m-d H:i:s");
$sql = "INSERT INTO verify_code (id_user, code, date, status_code) VALUES ('$id_base', '$code', '$now', 0)";
$connection->prepare($sql)->execute();
$message="Kod do weryfikacji:\n\n$code\n\nWiadomosc zostala wygenerowana automatycznie: $time";
$sender="From: domena.pl";
@mail($email, "Kod weryfikacyjny", $message, $sender);
unset($_SESSION['error']);
$statement = null;
$connection = null;
header('Location: verify.php');
}
else
{
$_SESSION['error'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
$statement = null;
$connection = null;
header('Location: ../login.php');
}
} else {
$_SESSION['error'] = '<span style="color:red">Nieprawidłowy login lub hasło!</span>';
$statement = null;
$connection = null;
header('Location: ../login.php');
}
$statement = null;
$connection = null;
?>
Wiadomo, do tego mam jeszcze sprawdzanie kodu do logowania 2-etapowego ale czy wszystko jest poprawnie zrobione i co najważniejsze BEZPIECZNIE?
Przykładowe połączenie do wypisania tabeli na stronie z bazy:
<?php
// NOTA INFORMACYJNA
// W zapytaniu do bazy (AND ZNACZY I) a (OR ZNACZY LUB)
// System warunkowy
// Przypisanie wartości inputa do zmiennej
$id_if = $_POST['idif'];
// Zmienne konfiguracyjne
$baza = "database"; // Nazwa tabeli bazy danych
// Sprawdzanie wartości z formów (to omińmy bo zrobiłem zależność wczytywaną z innej strony- zostawmy 1 == 1 dla ułatwienia.
if(1 == 1){
// Konfiguracja 1
$warunek_pierwszy = "imie";
$wartosc_dla_warunku_pierwszego = "jan";
$warunek_drugi = "nazwisko";
$wartosc_dla_warunku_drugiego = "kowalski";
// Tworzenie zapytania
$sql = "SELECT * FROM `$baza` WHERE $warunek_pierwszy='$wartosc_dla_warunku_pierwszego' AND $warunek_drugi='$wartosc_dla_warunku_drugiego''";
// Działanie skryptu
// Połączenie z bazą
require '../funkcje/database_connect/dbsoft.php';
// Sprawdzanie czy istnieje w bazie użytkownik pasujący do konfiguracji 1
$qq = $connection->prepare($sql);
$qq->execute();
$baza = $qq->rowCount();
if($baza == 0){
echo '<font class="text-danger">Nie znaleziono.</font>'; }else{
// Wypisanie danych z bazy
$data = $qq->fetchAll(PDO::FETCH_OBJ);
if (!$qq) {
echo "\nPDO::errorInfo():\n"; }
?>
Z góry dziękuję za wszelką pomoc (IMG:
style_emoticons/default/smile.gif)
Ten post edytował gloweres 14.10.2020, 12:00:59