WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Filtrera SQL-Injections... (https://www.wn.se/forum/showthread.php?t=32711)

Staffconsulting 2008-10-21 23:21

Jag filtrerar följande :

text = Replace(text,"'","")
text = Replace(text,";","")
text = Replace(text,"xp_","")
text = Replace(text,"--","")
text = Replace(text,"and ","")
text = Replace(text," or ","")
text = Replace(text,"delete","")
text = Replace(text,"0x3a","")

Missat något?

WizKid 2008-10-21 23:36

får man inte skriva "and"?

I PHP använder jag mysql_real_escape_string så escapear \x00, \n, \r, \, ', " and \x1a

emilv 2008-10-21 23:55

mysql_real_escape_string anropar MySQL:s klientbibliotek för att skydda dig mot injektioner. Det är troligtvis betydligt säkrare än att själv försöka filtrera olika tecken.

Varför du överhuvudtaget skulle behöva filtrera ord som "and" och "delete" förstår jag inte. Hur ska man då kunna diskutera fåglar eller skriva på engelska?

grazzy 2008-10-22 00:11

Varför tillåter du input i dina sql-satser? Enda stället jag kan komma på när det är nödvändigt är ju tex sökningar och då kan du ju enkelt filtrera bort alla tecken utom a-z0-9 + lite extra med ett regexp.

Kod:

$filtered = preg_replace("/[^a-z0-9]/","",$input);

emilv 2008-10-22 00:26

Citat:

Originally posted by grazzy@Oct 22 2008, 00:11
Varför tillåter du input i dina sql-satser? Enda stället jag kan komma på när det är nödvändigt är ju tex sökningar och då kan du ju enkelt filtrera bort alla tecken utom a-z0-9 + lite extra med ett regexp.
Kod:

filtered = preg_replace/^a-z0-9/,,input;

Han kanske inte vill använda PDO och liknande bibliotek av prestandaskäl?

dotvoid 2008-10-22 00:59

Om man undviker PDO av prestandaskäl tror jag man är lite snett ute. Om man trots allt inte vill använda PDO finns som ovan nämnts utmärkta mysql_real_escape_string() samt motsvarande för de andra databasinterfacen.

Man ska inte filtrera text själv. Det är väldigt bökigt att helt filtrera alla varianter med olika escape-tecken, hex-tecken etc. Text är svårfiltrerad. Däremot ska man alltid kontrollera alla strukturerade fält som valuta, nummer, person-nummer, datum etc. Där kan man ju enkelt sätta upp enkla och koncisa filter-regler.

Dessutom är jag tveksam till att förändra input-värden. Om där finns saker som inte ska in i databasen bör man väl anse att all data från källan är att anse som dubiös och icke önskvärd. Då bör man väl hellre felhantera än lägga in skräp i databasen. Bad practice!

grazzy 2008-10-22 01:51

Har man såpass problem med prestanda att man inte kan köra ett regexp är jag skeptisk till att man använder en relationsdatabas..

Fruitness 2008-10-22 11:33

Hej,

Ser ut som VBScript/ASP? Isåfall är det väl utmärkt om du använder (ADO) Command-objektet tillsammans med parametrar så slipper du oroa dig om vad du ska filtrera bort.

Staffconsulting 2008-10-22 13:42

Jo det är gammal hederlig ASP 3.0, kunden har en inloggningsruta där det förut var möjligt att göra lite kul saker med SQL-databasen...

jag har max 1 timme att lägga ner på detta så jag gjorde det enklaste jag kom på, replace...

Command objektet och parametrar brukar jag använda själv faktiskt...

Men det ser ok ut??


Alla tider är GMT +2. Klockan är nu 17:46.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson