Hoe voorkom MySQL sql-inspuiting? SQL inspuiting beginsel en voorkoming

MySQLHoe om SQL-inspuiting te voorkom? SQL inspuiting beginsel en voorkoming

MySQL en SQL-inspuiting

As jy die data wat deur die gebruiker ingevoer is deur 'n webblad neem en dit in 'nMySQL databasis, dan kan daar SQL-inspuiting sekuriteitsprobleme wees.

Hierdie hoofstuk sal bekendstel hoe om SQL-inspuiting te voorkom en die ingespuite karakters in SQL deur skrifte te filtreer.

Die sogenaamde SQL-inspuiting is om die bediener te mislei om kwaadwillige SQL-opdragte uit te voer deur SQL-opdragte in die webvorm in te voeg om die navraagstring van die domeinnaam of bladsyversoek in te dien of in te voer.

Ons moet nooit gebruikersinsette vertrou nie, ons moet aanvaar dat gebruikersinvoerdata onveilig is, en ons moet almal gebruikersinvoerdata filtreer.

In die volgende voorbeeld moet die ingevoerde gebruikersnaam 'n kombinasie van letters, syfers en onderstrepe wees, en die gebruikersnaam moet tussen 8 en 20 karakters lank wees:

if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches))
{
   $result = mysqli_query($conn, "SELECT * FROM users 
                          WHERE username=$matches[0]");
}
 else 
{
   echo "username 输入异常";
}

Kom ons kyk na die SQL-situasie wat voorkom wanneer geen spesiale karakters gefiltreer word nie:

// 设定$name 中插入了我们不需要的SQL语句
$name = "Qadir'; DELETE FROM users;";
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

In die bogenoemde inspuitingstelling het ons nie die veranderlike van $name gefiltreer nie, en die SQL-stelling wat ons nie nodig het nie, word in $name ingevoeg, wat al die data in die gebruikerstabel sal uitvee.

mysqli_query() in PHP word nie toegelaat om veelvuldige SQL-stellings uit te voer nie, maar in SQLite en PostgreSQL kan verskeie SQL-stellings gelyktydig uitgevoer word, so ons moet die data van hierdie gebruikers streng verifieer.

Om SQL-inspuiting te voorkom, moet ons aandag gee aan die volgende punte:

  • 1. Moet nooit gebruikersinsette vertrou nie.Gaan die gebruiker se insette na, jy kan gewone uitdrukkings gebruik, of die lengte beperk; omskep enkele aanhalingstekens en dubbel "-", ens.
  • 2. Moet nooit dinamiese samestelling sql gebruik nie, jy kan geparameteriseerde sql gebruik of gestoorde prosedures direk gebruik vir datanavraag en toegang.
  • 3. Moet nooit databasisverbindings met administrateurregte gebruik nie, gebruik aparte databasisverbindings met beperkte voorregte vir elke toepassing.
  • 4. Moenie vertroulike inligting direk stoor, wagwoorde en sensitiewe inligting enkripteer of verhaas nie.
  • 5. Die uitsonderingsinligting van die toepassing moet so min as moontlik wenke gee, en dit is die beste om persoonlike foutinligting te gebruik om die oorspronklike foutinligting te verpak
  • 6. Die opsporing metode van sql inspuiting neem oor die algemeen hulp aan软件Of die webwerfplatform om op te spoor, die sagteware gebruik gewoonlik die sql-inspuitingopsporingsinstrument jsky, en die webwerfplatform het die Yisi-webwerfsekuriteitsplatformopsporingsinstrument. MDCSOFT SCAN et al.Die gebruik van MDCSOFT-IPS kan effektief teen SQL-inspuiting, XSS-aanvalle, ens.

Voorkom SQL-inspuiting

In skriftale soos Perl en PHP kan u die data wat deur die gebruiker ingevoer word, ontsnap om SQL-inspuiting te voorkom.

Die MySQL-uitbreiding vir PHP bied die mysqli_real_escape_string()-funksie om spesiale invoerkarakters te ontsnap.

if (get_magic_quotes_gpc()) 
{
  $name = stripslashes($name);
}
$name = mysqli_real_escape_string($conn, $name);
 mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");

Inspuiting in soortgelyke stellings

Wanneer navraag gedoen word soos, as die gebruiker waardes met "_" en "%" invoer, sal dit gebeur: die gebruiker wou oorspronklik "abcd_" navraag doen, maar die navraagresultate sluit in "abcd_", "abcde" en "abcdf" " Ens.; die probleem kom ook voor wanneer die gebruiker "30%" wil navraag doen (let wel: dertig persent).

In die PHP-skrip kan ons die addcslashes()-funksie gebruik om die bogenoemde situasie te hanteer, soos in die volgende voorbeeld:

$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_");
// $sub == \%something\_
 mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");

Die addcslashes() funksie voeg 'n backslash voor die gespesifiseerde karakter by.

Sintaksis formaat:

addcslashes(string,characters)
参数beskrywing
stringVereis.Spesifiseer die string om na te gaan.
karaktersOpsioneel.Spesifiseer die karakter of reeks karakters wat deur addcslashes() geraak word.

Hoop Chen Weiliang Blog ( https://www.chenweiliang.com/ ) gedeel "Hoe voorkom MySQL sql-inspuiting? sql inspuiting beginsel en voorkoming", sal dit jou help.

Welkom om die skakel van hierdie artikel te deel:https://www.chenweiliang.com/cwl-500.html

Welkom by die Telegram-kanaal van Chen Weiliang se blog om die nuutste opdaterings te kry!

🔔 Wees die eerste om die waardevolle "ChatGPT Content Marketing AI Tool Usage Guide" in die kanaal se topgids te kry! 🌟
📚 Hierdie gids bevat groot waarde, 🌟Dit is 'n seldsame geleentheid, moet dit nie misloop nie! ⏰⌛💨
Share en like as jy wil!
Jou deel en laaiks is ons voortdurende motivering!

 

发表 评论

U e-posadres sal nie gepubliseer word nie. Vereiste velde word gebruik * Etiket

blaai na bo