Kuidas vältida SQL-i süstimist

Mis on SQL-i süstimine (SQLi)?

Kõik teavad, et tehnoloogia arenedes on turvalisus iga ettevõtte ja sotsiaalmeedia platvormi peamine ja oluline funktsioon. Peaaegu iga ettevõte edastab oma äriandmed, need andmed salvestatakse andmebaasidesse. Seega pakub SQL tehnikaid teie andmete salvestamiseks häkkerite eest. Saame oma veebisaidi andmeid häkkerite eest ära hoida, kasutades erinevaid tehnikaid. Samamoodi on SQL-i süstimine häkkimistehnika. Häkkerid pääsevad teie andmetele juurde, samuti võivad nad teie andmebaasi koodi sisestades teie servereid krahhi teha. See meetod on teostatav kaldus veebipakettide ebaõige kodeerimise tõttu. Mõni uus arendaja ei kontrolli andmevälja tühjust ja tühi väli on SQL-i süstimise põhjuseks.

SQL-i süstimise vältimine parameetritega päringute kaudu

See lähenemisviis seisneb koostatud väidete kasutamises küsimärgi kohahoidjaga (?) meie päringutes iga kord, kui peame sisestama tarbija määratud tasu. See on väga tõhus ja kui JDBC tõukejõu rakendamise sees pole uss, on see kaitstud ärakasutamise suhtes.



Selle tehnika lihtne näidiskood on:

avalik loend safeFindAccountsByCustomerId( String customerId )

viskab erand {

String sql = ‘ vali ‘ + ‘ kliendi_id, acc_number, filiaali_id, saldo kontodest ' + ' kus kliendi_id = ? ';

Ühendus c = dataSource.getConnection( ) ;

PreparedStatement p = c.prepareStatement( sql ) ;

p.setString( 1 , customerId ) ;

ResultSet rs = p.executeQuery( sql ) ) ;

// välja jäetud – töötleb ridu ja tagastab kontoloendi

}

Ülaltoodud koodis on PreparedStatementi saamiseks saadaval meetod readyStatement() ühenduse näites. See võimaldab meil enne selle täitmist küsimusele mõistlikult sisestada isiku poolt antud väärtused.

Kaitstud päritolunimetuse ettevalmistatud päringute kasutamine

Kasutage kaitstud päritolunimetust ja ettevalmistatud päringuid.

($conn on kaitstud päritolunimetusega objekt)

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

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

$stmt -> bindValue(‘ :nimi ’ , $nimi ) ;

$stmt -> täitma( ) ;

Koostatud avaldused on SQL-i süstimise suhtes vastupidavad, kuna parameetri väärtusi, mis hiljem unikaalse protokolli kasutamisel edastatakse, ei pea nüüd edukalt põgenema. Kui algne deklaratsiooni mall ei ole tuletatud väljastpoolt sisestusklahvi, ei saa SQL-i süsti tekkida.

Ennetamine Ruby Frameworki objektide relatsioonikaardistamise (ORM) abil

Paljud arendusmeeskonnad otsustavad kasutada Object Relational Mapping (ORM) raamistikke, et muuta SQL-i tulemusüksuste tõlkimine koodiobjektideks eriti sujuv. ORM-i tööriistad viitavad sageli sellele, et arendajad peaksid harva oma koodi SQL-lauseid kirjutama – ja need tööriistad kasutavad hea meelega parameetritega lauseid kapoti all.

def praegune_kasutaja(e-post)

# Objekt 'Kasutaja' on Active Record objekt, mis peab leidma meetodeid

# genereerib Rails automaatselt.

User.find_by_email (e-post)

Lõpp

Ülaltoodud kood säästab teid SQL-i süstide või häkkerite rünnakute eest.

Krüpteeritud andmebaas

Teine lihtne meetod SQL-andmebaasi sisestamise vältimiseks on krüptitud andmebaas või andmed. Nii et tavaliselt salvestage oma andmebaasi mandaadid eraldi aruandesse ja krüptige need turvaliselt, et ründajad ei saaks sellest palju kasu.