Vitajte na [www.pocitac.win] Pripojiť k domovskej stránke Obľúbené stránky

Domáce Hardware Siete Programovanie Softvér Otázka Systémy

Ako kontrolujete údaje uvedené používateľom s databázovými hodnotami pomocou PHP z databázy MySQL?

Existuje niekoľko spôsobov, ako skontrolovať, či údaje poskytnuté používateľom zhodujú údaje v databáze MySQL pomocou PHP. Najlepší prístup závisí od toho, čo porovnávate a ako chcete zvládnuť potenciálne nezrovnalosti. Tu je niekoľko príkladov so zameraním na osvedčené postupy zabezpečenia:

1. Kontrola jedného používateľa (napr. Prihlásenie):

Toto je najbežnejší scenár. Skontrolujeme, či sa používateľské meno a heslo zhodujú s záznamom v databáze. Je zásadne, pred porovnaním hashme heslo. Nikdy neukladajte heslá do obyčajného textu!

`` `php

// Databázové poverenia (vymeňte ich za svoje skutočné poverenia!)

$ serverName ="your_serverName";

$ username ="your_username";

$ heslo ="your_password";

$ dbname ="your_dbname";

// Vstup používateľa (dezinfikujte to!)

$ userNameInput =$ _post ["username"];

$ hesloInput =$ _post ["heslo"];

// dezinfikovať vstupy používateľov, aby sa zabránilo injekcii SQL

$ userNameInput =mysqli_real_escape_string ($ conn, $ userNameInput);

$ hesloInput =mysqli_real_escape_string ($ conn, $ passwordInput);

// Vytvorte pripojenie

$ conn =new mysqli ($ servername, $ username, $ heslo, $ dbname);

// Skontrolujte pripojenie

if ($ conn-> connect_error) {

die ("Connection zlyhal:". $ conn-> connect_error);

}

// Pripravte sa a naviazajte

$ STMT =$ conn-> Pripravte ("Vyberte heslo_hash od používateľov, kde používateľské meno =?");

$ STMT-> bind_param ("S", $ userNameInput);

$ stmt-> execute ();

$ result =$ stmt-> get_result ();

if ($ result-> num_rows> 0) {

$ row =$ result-> fetch_assoc ();

$ hashedpassword =$ riadok ["Password_hash"];

// Overte heslo pomocou hesla_verify (vstavaná funkcia hashovania hesla PHP)

if (heslo_verify ($ hesloInput, $ hashedpassword)) {

// Prihláste sa úspešné

echo „Prihláste sa úspešné!“;

} else {

// Nesprávne heslo

echo "nesprávne heslo.";

}

} else {

// Užívateľské meno sa nenašlo

echo "Userne meno nenašlo.";

}

$ STMT-> Close ();

$ conn-> close ();

?>

`` `

Vysvetlenie:

* Databázové poverenia: Nahraďte poverenia zástupných symbolov svojimi skutočnými podrobnosťami o databáze MySQL.

* Vstup používateľa: Tento kód predpokladá, že používateľské meno a heslo sa odosielajú prostredníctvom žiadosti o príspevok. Vždy dezinfikujte vstup používateľa Aby sa zabránilo zraniteľnostiam SQL injekcie. `mysqli_real_escape_string ()` je základný krok, ale pripravené príkazy (tu sa tu používajú) sú oveľa robustnejšie.

* Pripravené vyhlásenie: Pripravené vyhlásenie zabraňuje vstrekovaniu SQL oddelením dotazu SQL od údajov poskytnutých používateľom. Je to rozhodujúce pre bezpečnosť.

* Hashing hesla: Databáza by mala ukladať heslo *Hashes *, nie obyčajné textové heslá. `Password_hash ()` Vytvorí zabezpečený hash a `heslo_verify ()` porovná vstup používateľa s uloženým hashom.

* Manipulácia s chybami: Kód obsahuje základné spracovanie chýb pre pripojenie databázy a zlyhania dotazov.

2. Kontrola viacerých zápasov (napr. Hľadanie tabuľky):

Ak potrebujete nájsť viacero zápasov na základe vstupu používateľa (napríklad hľadanie produktov s konkrétnym názvom), budete musieť prispôsobiť dotaz:

`` `php

// ... (Databázové pripojenie ako je uvedené vyššie) ...

$ searchterm =$ _post ["SearchterM"];

$ searchterm =mysqli_real_escape_string ($ conn, $ searchterm); // dezinfikovať!

$ sql ="Vyberte * z produktov, kde je názov ako '%$ SearchterM%'"; // Jednoduchý príklad - použite pripravené vyhlásenie pre lepšiu bezpečnosť!

$ result =$ conn-> query ($ sql);

if ($ result-> num_rows> 0) {

while ($ row =$ result-> fetch_assoc ()) {

// Spracujte každý zodpovedajúci riadok

Echo "Product:". $ riadok ["name"]. „
„;

}

} else {

echo „nenájdené žiadne výrobky“.;

}

// ... (zatvoriť pripojenie) ...

?>

`` `

Dôležitá poznámka: Vyššie uvedený príklad vyhľadávania používa zreťazenie reťazca, ktorá je zraniteľná voči injekcii SQL, ak `$ Searchterm` nie je dezinfikovaný . Pre bezpečné riešenie ho prepíšte pomocou pripravených vyhlásení. Príklad:

`` `php

$ STMT =$ conn-> Pripravte („Vyberte * z produktov, kde sa páči?“);

$ searchterm ="%". $ Searchterm. "%"; // Pridajte zástupné znaky pre podobne

$ STMT-> bind_param ("S", $ SearchterM);

$ stmt-> execute ();

// ... Zvyšok kódu na zvládnutie výsledkov ...

`` `

Nezabudnite nahradiť tabuľku zástupných symbolov a názvy stĺpcov za svoju skutočnú schému databázy. Vždy uprednostňujte bezpečnosť pomocou pripravených príkazov a správnej dezinfekcie vstupov, aby ste zabránili injekčným útokom SQL. Zvážte použitie parametrizovaných dopytov pre akúkoľvek interakciu s vstupom používateľa a vašej databáze. Pre komplexnejšie scenáre alebo veľké súbory údajov možno budete chcieť preskúmať pokročilejšie techniky, ako sú uložené postupy.

Najnovšie články

Copyright © počítačové znalosti Všetky práva vyhradené