Ako zabrániť injekcii SQL

Čo je SQL Injection (SQLi)?

Každý vie, že s pokrokom v oblasti technológií je bezpečnosť základnou a dôležitou vlastnosťou každého podnikania a platformy sociálnych médií. Takmer každý podnik využíva svoje obchodné údaje a tieto údaje ukladá do databáz. SQL teda poskytuje techniky na záchranu vašich údajov pred hackermi. Údaje z našich webových stránok môžeme pred hackermi zabrániť pomocou rôznych techník. Podobne aj SQL injection je technika hackovania. Hackeri môžu pristupovať k vašim údajom a tiež môžu zrútiť vaše servery vložením nejakého kódu do vašich databáz. Táto metóda je uskutočniteľná z dôvodu nesprávneho kódovania naklonených webových balíkov. Niektorí noví vývojári nekontrolujú prázdnotu dátového poľa a prázdne pole je príčinou SQL injection.

Zabráňte vkladaniu SQL prostredníctvom parametrizovaných dotazov

Tento prístup spočíva v použití pripravených výpisov so zástupným symbolom otáznika (?) v našich dopytoch vždy, keď potrebujeme vložiť poplatok poskytovaný spotrebiteľom. Je to veľmi efektívne a pokiaľ sa v implementácii hybnej sily JDBC nenachádza červ, odolný voči zneužitiu.

Jednoduchý príklad kódu pre túto techniku ​​je:

verejný zoznam safeFindAccountsByCustomerId( String customerId )

hodí výnimku {

Reťazec sql = ‘ vyberte ‘ + ‘ customer_id, acc_number, branch_id, zostatok z účtov ‘ + ‘ kde customer_id = ? ' ;

Pripojenie c = dataSource.getConnection( ) ;

PreparedStatement p = c.prepareStatement( sql ) ;

p.setString( 1 , customerId ) ;

ResultSet rs = p.executeQuery( sql ) );

// vynechané – spracuje riadky a vráti zoznam účtov

}

Vo vyššie uvedenom kóde metóda PrepareStatement() dostupná v príklade pripojenia na získanie PreparedStatement. To nám umožňuje správne vložiť hodnoty poskytnuté osobou do otázky pred jej vykonaním.

Použitie dopytov pripravených na CHOP

Použite CHOP a pripravené dotazy.

($conn je objekt CHOP)

$stmt = $conn -> priprav (‘ INSERT INTO tbl VALUES ( :Id , :name ) ‘ );

$stmt -> bindValue ( ‘ :id ‘ , $id ) ;

$stmt -> bindValue(‘ :name ‘ , $name ) ;

$stmt -> vykonat() ;

Pripravené príkazy sú odolné voči vstrekovaniu SQL, pretože hodnoty parametrov, ktoré sa prenášajú neskôr pomocou jedinečného protokolu, teraz nemusia byť úspešne únikom. Ak pôvodná šablóna deklarácie nie je odvodená z externého vstupu, SQL injection nemôže vzniknúť.

Zabrániť prostredníctvom Object Relational Mapping (ORM) v Ruby Framework

Mnoho vývojových tímov sa rozhodlo použiť rámce Object Relational Mapping (ORM), aby bol preklad výsledných jednotiek SQL do objektov kódu mimoriadne bezproblémový. Nástroje ORM často naznačujú, že vývojári by len zriedka mali písať príkazy SQL svojho kódu – a tieto nástroje s radosťou používajú parametrizované príkazy pod kapotou.

def current_user(e-mail)

# Objekt „User“ je objekt Active Record, ktorý musí nájsť metódy

# automaticky generované Rails.

User.find_by_email (e-mail)

Koniec

Vyššie uvedený kód vás zachráni pred injekciami SQL alebo útokmi hackerov.

Šifrovaná databáza

Ďalšou jednoduchou metódou, ako zabrániť injekciám vašej databázy SQL, je šifrovaná databáza alebo údaje. Preto zvyčajne uložte poverenia databázy do samostatnej správy a bezpečne ju zašifrujte, aby sa zabezpečilo, že útočníci z toho nebudú mať veľa úžitku.