sql >> Databáze >  >> RDS >> Mysql

PHP bezpečná uživatelská proměnná

Existují dvě velmi důležité věci, které musíte udělat, abyste se vyhnuli vážným bezpečnostním problémům.

  1. Před vložením uživatelského vstupu do dotazu SQL musíte uniknout. Escapování znamená escapování všech speciálních znaků, jako je '; naštěstí existuje funkce, která to již dělá automaticky:mysql_real_escape_string .

    Pokud neuniknete uživatelskému vstupu, mohou se stát ošklivé věci. Představte si, že váš dotaz je INSERT INTO userdata VALUES ('$user_data') . Nyní si představte, že uživatel napsal '; DROP DATABASE userdata; .

    Pokud jej neuzavřete, váš dotaz bude vypadat takto:INSERT INTO userdata VALUES (''; DROP DATABASE userdata;') . Jak si dokážete představit, není to dobré:pokud máte povoleno více příkazů, můžete se rozloučit se svou databází. Toto se nazývá vložení SQL útok.

  2. Když odesíláte proměnnou uživateli, musíte také správně nahradit speciální znaky HTML entitami HTML. Naštěstí existuje funkce, která to dokáže:htmlspecialchars() . Transformuje speciální HTML znaky, jako je < na < .

    Zdá se, že jde o problém, který je často podceňován, ale ve skutečnosti je velmi vážný. Představte si, že $user_data obsahuje <script>SomeNastyScript()</script> . Mohl by zneužít existující zranitelnosti v prohlížeči vašich uživatelů nebo by mohl poslat útočníkovi soubor cookie, který není HTTPOnly (který může obsahovat uložená hesla), nebo by mohl uživatele oklamat, aby zapsal své heslo do formuláře vygenerovaného manipulací s DOM (možné v javascriptu) nebo mnoho dalších špatných věcí.

    Toto se nazývá XSS (Skriptování napříč weby).

Krátká verze

  1. Zavolejte mysql_real_escape_string na řetězec před vložením do vašeho SQL dotazu (ale ne když echo to).

  2. Zavolejte htmlspecialchars na řetězec, než jej zobrazíte uživateli (ale ne, když jej vložíte do databáze).



  1. Úprava plánu agenta SQL Server (T-SQL)

  2. Třídění dotazu MySQL pomocí ORDER BY nebo pomocí třídicích funkcí PHP

  3. Zabití dotazu MySQL během provádění pomocí PHP a AJAX

  4. Nový příznak trasování pro opravu výkonu proměnné tabulky