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

Ochrana vstřikování SQL

Toto není o čem je SQL Injection. Kdykoli ve vašem dotazu SQL použijete parametry, které nebyly sanovány, ponecháváte databázi otevřenou pro SQL injection, která nemusí mít nutně za cíl zničit data. Může to být také krádež dat nebo získání neoprávněného přístupu.

Zvažte velmi omezený účet, kde jediné, co může udělat, je SELECT . Napíšete dotaz pro ověření:

$sql = "SELECT COUNT(*) AS count
          FROM users 
         WHERE user_id='{$_POST['user']}' AND pass='{$_POST['password'}'";

// check if returns a count of 1, if yes, log in

Při normálním vstupu očekáváte, že dotaz bude vypadat takto:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'username' AND pass='********'

Což by mělo vrátit 1 jako počet, pokud se shodují uživatelské jméno i heslo. Nyní se útočník pokouší přihlásit jako admin. Protože jste své vstupy nevyčistili, odešlou $_POST['user'] jako:admin'; -- . Celý dotaz se změní na:

SELECT COUNT(*) AS count
  FROM users 
 WHERE user_id = 'admin'; -- AND pass='********'

Vše po -- je komentář, takže to ignoruje druhou podmínku a bez ohledu na to vrátí 1. Tady to je, právě jste udělili přístup administrátora uživateli se zlými úmysly. Tak se provádějí některé skutečné útoky. Začnete s málo privilegovaným účtem a přes díry v zabezpečení se snažíte získat přístup k dalším privilegiím.

Stručně řečeno, mít účet pro celou aplikaci s omezenými oprávněními (např.:no DROP). , ALTER atd.) je dobrý. Nikdy nedávejte nikomu ani žádné aplikaci více oprávnění, než potřebuje. Ale abyste zabránili vkládání SQL, použijte připravené příkazy .



  1. Jak vytvořit server na Azure a hostovat na něm stránky php,mysql

  2. Migrace Laravel (errno:Omezení cizího klíče 150 je nesprávně vytvořeno)

  3. Jak filtrovat datum pomocí datetimepicker přes databázi

  4. psql neplatný příkaz \N při obnově sql