sql >> Database teknologi >  >> RDS >> Mysql

Er udvalgte rullefelter sårbare over for enhver form for injektion

Hvert enkelt element på et websted kan ændres af en ondsindet bruger (skjulte felter, div'er, stilarter, ajax-kald, you name it...).

Når det er sagt, hvis du allerede bruger Prepared Statements, skal du ikke bekymre dig for meget om SQL Injection, fordi mysql allerede ved, hvilke sætninger der skal udføres.

I stedet bør du rense alt det output, der gengives på et websted.

Lad os sige, at du i din form spørger, hvilket land jeg bor i på denne måde:

 <select name="country">
     <option value="Mexico">Mexico</option>
     <option value="USA">USA</option>
     <option value="Canada">Canada</option>
 </select>

men jeg er en ondsindet bruger, og jeg bruger Chromes kodeinspektør til at ændre din HTML, og jeg vælger Mexico, men ændrer dens værdi til

og hvis du udskriver den værdi på en anden side på denne måde:

 Your country is: <?=$country?>

Så skriver du:

 Your country is:
 <script type="text/javascript">alert("Hello World")</script>

og en advarselsboks vil poppe op med teksten "Hello World"

Hvilken skade kan jeg gøre med det, kan du undre dig over...

godt, jeg kan gøre hvad jeg vil med det, jeg kan stjæle cookies, eller hvis værdien er offentlig (f.eks. at du viser den værdi på din forside), så kunne jeg omdirigere dine brugere til en anden hjemmeside, ændre indholdet på din hjemmeside. ... hvad jeg vil.

For at rense dine brugeres output kan du bruge

htmlentities

Det vil for eksempel konvertere < > symboler til dens respektive kode:< og >



  1. Drop database return Fejl ved droppe database fejlnr.:66 i MySQL

  2. Underforespørgsel returnerer mere end 1 række

  3. rails + MySQL på OSX:Bibliotek ikke indlæst:libmysqlclient.18.dylib

  4. Forskelle mellem utf8 og latin1