25. maj 2008 - 23:04Der er
16 kommentarer og 1 løsning
JSCRIPT til at luften ud af SQL Injection
Jeg har lavet et par funktioner til at fange noget af den SQL injection, der florerer for tiden. Jeg har forsøgt at lave tilsvarende funktioner i Jscript med mindre held. Jeg har illustreret funktionerne i et test java script:
<script type="text/javascript">
//sikrer mod SQL injections tror vi - hen 2008 var teststr ="Æv2=3BUNIONæv'1=1union"; var teststr2 ="27";
function isNumeric(vTestValue) { // put the TEST value into a string object variable var sField = new String(Trim(vTestValue));
// check for a length of 0 - if so, return false if(sField.length==0) { return false; } else if(sField.length==1 && (sField.charAt(0) == '.' || sField.charAt(0) == ',' || (sField.charAt(0) == '-'))) { return false; }
// loop through each character of the string for(var x=0; x < sField.length; x++) { // if the character is < 0 or > 9, return false (not a number) if((sField.charAt(x) >= '0' && sField.charAt(x) <= '9') || sField.charAt(x) == '.' || sField.charAt(x) == ',' || (sField.charAt(x) == '-' && x==0)) { /* do nothing */ } else { return false; } }
// made it through the loop - we have a number return true; } </script>
Jscript klager et - ikke er script i et script, hvis jeg forsøger at medtage script i søge array. IsNomeric virker ikke.
Hvad skal der til for at få det til at virke på serveren?
Men det er slet, slet, slet ikke nødvendigt at gøre så umådeligt besværligt. Jeg formoder du bruger ASP med Jscript? Løsning er, har altid været, vil altid være at bruge parameters (prepared statements), som selv gammeldags ASP understøtter.
Nå, det kan være svært at finde på Google. Prøv: adodb asp prevent sql injection Det er selvfølgelig hverken ASP eller JScript eller VBScript, der gør det, men ADODB. Den her viser vist princippet: http://kb.adobe.com/selfservice/viewContent.do?externalId=581a553c (du skal ned til noget med ...parameters.append...)
Er det så ikke bare "fattigmands-metoden": erstat een ' med '' i alle tekststrenge, og lave et "tal-tjek" på talfelter. Det er vel realistisk hvis du har en:
sql = "update tabellen set navn='" + navn + "' where id=' + id;
Så er du vel igang med mere end sql-injection? Du vil sørge for at man ikke kan skrive fx "drop" i et felt, selv om det på ingen måde er farligt?
Det kan måske være en god idé at lave en form for analyse, der kan advisere dig om at nogen er i gang med et "angreb". Men det bør vel ikke automatisk fjerne ting.
Erik - dette er ikke det rigtige sted for en diskussion om hvad og hvor og hvordan. Jeg er på vej til Holland og havde håbet på en teknisk tilbagemelding på noget JS som kører i VB inden jeg dampede af. SUK.
Drop af en medlemsliste er da 'farligt' for dem der har brug for den ;-)
Så må du forklare dig bedre. Hvad mener du med: "Jscript klager et - ikke er script i et script, hvis jeg forsøger at medtage script i søge array. IsNomeric virker ikke." ?
Drop er totalt ufarligt, hvis du har lavet de nødvendige sql-tekniske ting mod injection. Det er vel mere et problem hvis brugerne ikke må bruge ordet i et felt.
"dette er ikke det rigtige sted for en diskussion om hvad og hvor og hvordan." >> Så er det vel heller ikke stedet at søge info. At få informationer kræver, man i det mindste forklarer, hvad det er, man søger info om ... og det kan ikke gøres i 'luftige' vendinger, når emnet er programmering =)
Det er netop programmering. Hvorfor virker IsNumeric ikke ? og hvorfor må man ikke søge efter <script> i JS men ok i VB. Det er squ da meget konkret. Jeg har endda leveret koden som fejler.
Jamen, fejlmeldingerne i din browser fortæller dig vel, hvorfor isNumeric ikke fungerer. Hvis ikke du har defineret en funktion, der hedder 'trim', er det vel ikke så underligt =)
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.