Article Directory
MySQLAhoana no hisorohana ny tsindrona sql? Fitsipika sy fisorohana SQL injection
MySQL ary SQL injection
Raha maka ny angon-drakitra nampidirin'ny mpampiasa amin'ny pejy web ianao ary ampidiro ao anaty aMySQL database, dia mety hisy olana amin'ny fiarovana SQL tsindrona.
Ity toko ity dia hampahafantatra anao ny fomba hisorohana ny tsindrona SQL sy ny fampiasana script hanivana ireo tarehintsoratra voatsindrona ao amin'ny SQL.
Ny antsoina hoe SQL tsindrona dia ny mamitaka ny mpizara mba hanatanteraka ny ratsy SQL baiko amin'ny alalan'ny fampidirana ny SQL baiko ao amin'ny tranonkala mba handefa na hampiditra ny antontan-taratasin'ny anaran-tsehatra na pejy fangatahana.
Tsy tokony hatoky ny fampidiran'ny mpampiasa na oviana na oviana isika, tsy maintsy mihevitra isika fa tsy azo antoka ny angon-drakitra fampidiran'ny mpampiasa, ary mila manivana ny angona fampidiran'ny mpampiasa isika rehetra.
Amin'ity ohatra manaraka ity, ny solon'anarana nampidirina dia tsy maintsy fitambaran'ny litera, isa ary tsipitsipika, ary tokony ho 8 ka hatramin'ny 20 ny halavan'ny solonanarana:
if (preg_match("/^\w{8,20}$/", $_GET['username'], $matches)) { $result = mysqli_query($conn, "SELECT * FROM users WHERE username=$matches[0]"); } else { echo "username 输入异常"; }
Andeha hojerentsika ny toe-javatra SQL izay mitranga rehefa tsy voasivana ny endri-tsoratra manokana:
// 设定$name 中插入了我们不需要的SQL语句 $name = "Qadir'; DELETE FROM users;"; mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Ao amin'ny fanambarana tsindrona etsy ambony, tsy nosivanay ny fari-piainan'ny $name. Ny fanambarana SQL izay tsy ilaintsika dia ampidirina ao amin'ny $name, izay hamafa ny angona rehetra ao amin'ny latabatra mpampiasa.
mysqli_query() ao amin'ny PHP dia tsy mahazo manatanteraka fanambarana SQL maro, fa ao amin'ny SQLite sy PostgreSQL, fanambarana SQL marobe dia azo tanterahina miaraka, noho izany dia mila manamarina ny angon-drakitra an'ireo mpampiasa ireo isika.
Mba hisorohana ny tsindrona SQL dia mila mandinika ireto teboka manaraka ireto isika:
- 1. Aza matoky mihitsy ny fidiran'ny mpampiasa.Hamarino ny fampidiran'ny mpampiasa, azonao atao ny mampiasa fomba fiteny mahazatra, na mametra ny halavany; mamadika teny tokana sy roa "-", sns.
- 2. Aza mampiasa sql fivoriambe mavitrika, azonao atao ny mampiasa sql voatokana na mampiasa fomba fiasa voatahiry mivantana amin'ny fangatahana data sy fidirana.
- 3. Aza mampiasa fifandraisana amin'ny angon-drakitra miaraka amin'ny tombontsoan'ny mpitantana, ampiasao ny fifandraisana amin'ny angon-drakitra misaraka miaraka amin'ny tombontsoa voafetra ho an'ny fampiharana tsirairay.
- 4. Aza mitahiry fampahalalana miafina mivantana, asio encryption na asiana tenimiafina sy fampahalalana saro-pady.
- 5. Ny fampahalalam-baovao miavaka amin'ny fampiharana dia tokony hanome soso-kevitra vitsivitsy araka izay azo atao, ary tsara kokoa ny mampiasa fampahalalana momba ny fahadisoana mahazatra mba hamehezana ny fampahalalana diso tany am-boalohany
- 6. Ny fomba fitadiavana ny tsindrona sql amin'ny ankapobeny dia mampiasa fanampianaSoftwareNa ny sehatry ny tranokala hamantarana, ny rindrambaiko amin'ny ankapobeny dia mampiasa ny sql injection detection tool jsky, ary ny tranokalan'ny tranonkala dia manana ny Yisi web security platform detection tool. MDCOFT SCAN et al.Ny fampiasana MDCOFT-IPS dia afaka miaro tsara amin'ny tsindrona SQL, fanafihana XSS, sns.
Misoroka SQL Injection
Amin'ny fiteny scripting toy ny Perl sy PHP dia afaka mandositra ny angon-drakitra nampidirin'ny mpampiasa ianao mba hisorohana ny tsindrona SQL.
Ny fanitarana MySQL ho an'ny PHP dia manome ny mysqli_real_escape_string() fiasa handosirana ireo endri-tsoratra manokana.
if (get_magic_quotes_gpc()) { $name = stripslashes($name); } $name = mysqli_real_escape_string($conn, $name); mysqli_query($conn, "SELECT * FROM users WHERE name='{$name}'");
Tsindrona amin'ny fanambarana mitovy
Rehefa manontany toy ny hoe, raha manana "_" sy "%" ny sanda nampidirin'ny mpampiasa, dia izao no hitranga: ny mpampiasa tany am-boalohany dia te-hanontany "abcd_", saingy misy "abcd_", "abcde", ary "abcdf" ny valin'ny fangatahana sns.; Mitranga koa ny olana rehefa te-hanontany "30%" ny mpampiasa (fanamarihana: telopolo isan-jato).
Ao amin'ny script PHP dia afaka mampiasa ny addcslashes() miasa isika mba hiatrehana ny toe-javatra etsy ambony, toy ny amin'ity ohatra manaraka ity:
$sub = addcslashes(mysqli_real_escape_string($conn, "%something_"), "%_"); // $sub == \%something\_ mysqli_query($conn, "SELECT * FROM messages WHERE subject LIKE '{$sub}%'");
Ny fiasa addcslashes() dia manampy tsipika mihemotra alohan'ny toetra voatondro.
endrika syntax:
addcslashes(string,characters)
| masontsivana | Description |
|---|---|
| tady | Takina.Manondro ny tady hojerena. |
| tarehin-tsoratra | Tsy voatery.Mamaritra ny toetra na ny isan'ny tarehin-tsoratra voakasika amin'ny addcslashes(). |
Hope Chen Weiliang Blog ( https://www.chenweiliang.com/ ) nizara "Ahoana no fomba hisorohana ny fampidirana sql ny MySQL? sql tsindrona fitsipika sy ny fisorohana", dia hanampy anao.
Tongasoa eto mizara ny rohy amin'ity lahatsoratra ity:https://www.chenweiliang.com/cwl-500.html
