Cyfeiriadur Erthygl
MySQLSut i atal pigiad sql? Egwyddor pigiad SQL ac atal
MySQL a chwistrelliad SQL
Os ydych chi'n cymryd y data a gofnodwyd gan y defnyddiwr trwy dudalen we a'i fewnosod yn aCronfa ddata MySQL, yna efallai y bydd problemau diogelwch pigiad SQL.
Bydd y bennod hon yn cyflwyno sut i atal chwistrelliad SQL a hidlo'r cymeriadau sydd wedi'u chwistrellu yn SQL trwy sgriptiau.
Y chwistrelliad SQL fel y'i gelwir yw twyllo'r gweinydd i weithredu gorchmynion SQL maleisus trwy fewnosod gorchmynion SQL i'r ffurflen we i gyflwyno neu fewnbynnu llinyn ymholiad yr enw parth neu gais y dudalen.
Ni ddylem byth ymddiried mewn mewnbwn defnyddwyr, rhaid inni dybio bod data mewnbwn defnyddwyr yn anniogel, ac mae angen i ni i gyd hidlo data mewnbwn defnyddwyr.
Yn yr enghraifft ganlynol, rhaid i'r enw defnyddiwr a gofnodwyd fod yn gyfuniad o lythrennau, rhifau, a thanlinellau, a rhaid i'r enw defnyddiwr fod rhwng 8 ac 20 nod o hyd:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysqli_query($conn, "SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
Gadewch i ni edrych ar y sefyllfa SQL sy'n digwydd pan na chaiff nodau arbennig eu hidlo:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Yn y datganiad pigiad uchod, ni wnaethom hidlo'r newidyn o $name, ac mae'r datganiad SQL nad oes ei angen arnom yn cael ei fewnosod yn $name, a fydd yn dileu'r holl ddata yn y tabl defnyddwyr.
mysqli_query() yn PHP ni chaniateir i weithredu datganiadau SQL lluosog, ond yn SQLite a PostgreSQL, gellir gweithredu datganiadau SQL lluosog ar yr un pryd, felly mae angen i ni wirio data'r defnyddwyr hyn yn llym.
Er mwyn atal pigiad SQL, mae angen inni dalu sylw i'r pwyntiau canlynol:
- 1. Peidiwch byth ag ymddiried mewn mewnbwn defnyddwyr.Gwiriwch fewnbwn y defnyddiwr, gallwch ddefnyddio ymadroddion rheolaidd, neu gyfyngu ar yr hyd; trosi dyfyniadau sengl a dwbl "-", ac ati.
- 2. Peidiwch byth â defnyddio sql cynulliad deinamig, gallwch ddefnyddio sql parameterized neu ddefnyddio gweithdrefnau storio yn uniongyrchol ar gyfer ymholiad data a mynediad.
- 3. Peidiwch byth â defnyddio cysylltiadau cronfa ddata â breintiau gweinyddwr, defnyddiwch gysylltiadau cronfa ddata ar wahân gyda breintiau cyfyngedig ar gyfer pob cais.
- 4. Peidiwch â storio gwybodaeth gyfrinachol yn uniongyrchol, amgryptio neu stwnsio cyfrineiriau a gwybodaeth sensitif.
- 5. Dylai gwybodaeth eithriad y cais roi cyn lleied o awgrymiadau â phosibl, ac mae'n well defnyddio gwybodaeth gwall arferol i lapio'r wybodaeth wall wreiddiol
- 6. Mae'r dull canfod chwistrelliad sql yn gyffredinol yn mabwysiadu cynorthwyol软件Neu'r llwyfan gwefan i ganfod, mae'r meddalwedd yn gyffredinol yn defnyddio'r offeryn canfod chwistrelliad sql jsky, ac mae gan lwyfan y wefan offeryn canfod platfform diogelwch gwefan Yisi. MDCSOFT SCAN et al.Gall defnyddio MDCSOFT-IPS amddiffyn yn effeithiol yn erbyn chwistrelliad SQL, ymosodiadau XSS, ac ati.
Atal Chwistrelliad SQL
Mewn ieithoedd sgriptio fel Perl a PHP gallwch ddianc rhag y data a gofnodwyd gan y defnyddiwr i atal chwistrelliad SQL.
Mae'r estyniad MySQL ar gyfer PHP yn darparu'r swyddogaeth mysqli_real_escape_string() i ddianc rhag nodau mewnbwn arbennig.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Chwistrellu mewn Datganiadau Tebyg
Wrth ymholi fel, os yw'r defnyddiwr yn mewnbynnu gwerthoedd gyda "_" a "%", bydd hyn yn digwydd: yn wreiddiol roedd y defnyddiwr eisiau cwestiynu "abcd_", ond mae canlyniadau'r ymholiad yn cynnwys "abcd_", "abcde", ac "abcdf " Etc.; mae'r broblem hefyd yn digwydd pan fo'r defnyddiwr eisiau cwestiynu "30%" (noder: tri deg y cant).
Yn y sgript PHP gallwn ddefnyddio'r swyddogaeth addcslashes() i drin y sefyllfa uchod, fel yn yr enghraifft ganlynol:
$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_"); // $sub == \%something\_ mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
Mae'r ffwythiant addcslashes() yn ychwanegu slaes cyn y nod penodedig.
Fformat cystrawen:
addcslashes(string,characters)
参数 | disgrifiad |
---|---|
llinyn | Angenrheidiol.Yn pennu'r llinyn i'w wirio. |
cymeriadau | Dewisol.Yn pennu'r nod neu'r ystod o nodau yr effeithir arnynt gan addcslashes(). |
Blog Chen Weiliang Gobeithio ( https://www.chenweiliang.com/ ) a rennir "Sut mae MySQL yn atal chwistrelliad sql? egwyddor pigiad sql ac atal", bydd yn eich helpu chi.
Croeso i chi rannu dolen yr erthygl hon:https://www.chenweiliang.com/cwl-500.html
Croeso i sianel Telegram o blog Chen Weiliang i gael y diweddariadau diweddaraf!
📚 Mae'r canllaw hwn yn cynnwys gwerth enfawr, 🌟Mae hwn yn gyfle prin, peidiwch â'i golli! ⏰⌛💨
Rhannwch a hoffwch os hoffech chi!
Eich rhannu a'ch hoff bethau yw ein cymhelliant parhaus!