Kom ihåg mig?
Home Menu

Menu


Skottsäkert skydd mot SQL-injection?

 
Ämnesverktyg Visningsalternativ
Oläst 2010-03-31, 03:23 #1
Landos avatar
Lando Lando är inte uppkopplad
Medlem
 
Reg.datum: Nov 2008
Inlägg: 242
Lando Lando är inte uppkopplad
Medlem
Landos avatar
 
Reg.datum: Nov 2008
Inlägg: 242
Standard Skottsäkert skydd mot SQL-injection?

Hej alla!

Jag har kollat runt lite och hittar inget bra om SQL-injections. Finns det något Skottsäkert skydd emot detta?

Tex:

Bra:
$var = $_GET[var]; //1
$sql = "SELECT * FROM ex WHERE var='$var'"; //SELECT * FROM ex WHERE var='1'

Problem:
$var = $_GET[var]; //' OR 1=1
$sql = "SELECT * FROM ex WHERE var='$var'"; //SELECT * FROM ex WHERE var='1' OR 1=1

Tack för svar!
Lando är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 06:56 #2
najks avatar
najk najk är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2005
Inlägg: 1 224
najk najk är inte uppkopplad
Har WN som tidsfördriv
najks avatar
 
Reg.datum: Oct 2005
Inlägg: 1 224
Kika på http://php.net/manual/en/function.my...ape-string.php
najk är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 07:42 #3
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
youheardit youheardit är inte uppkopplad
Har WN som tidsfördriv
 
Reg.datum: Oct 2008
Inlägg: 1 168
jag brukar använda:
PHP-kod:
$var mysql_real_escape_string(stripslashes(strip_tags($_GET['var']))); 
Fast jag använder bara strip_tags() om informationen ska skrivas ut utan html kodning osv.
Annars kan du ignorera den!
youheardit är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 08:09 #4
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
BjörnJ BjörnJ är inte uppkopplad
Mycket flitig postare
 
Reg.datum: May 2009
Inlägg: 971
Om det är heltal kan man köra:
PHP-kod:
$var intval($_GET[var]); 
Om det är flyttal kan man köra floatval(). Annars alltid mysql_real_escape_string() som najk länkade till. Den senare kan användas även till numeriska värden.

En fördel med intval och floatval är om man ska använda datan på andra ställen också, och inte bara i databasanrop. Man behöver t.ex. inte använda htmlspecialchars() vid utskrift av data från intval() eller floatval().

Om man verifierar datan på något sätt (t.ex. för att se att ett formulär är rätt ifyllt) kan man i vissa fall skippa mysql_real_escape_string(), men då gäller det att man verkligen har ordentlig koll på vad man gör, och vara säker på att det inte kan leda till problem om man gör någon uppdatering av koden i framtiden.

Tänk på att all data som kommer från användaren kan vara försök till SQL-injection, inklusive bl.a. cookies och information om vilken webbläsare som används.

Senast redigerad av BjörnJ den 2010-03-31 klockan 08:12
BjörnJ är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 09:31 #5
martines avatar
martine martine är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Mar 2005
Inlägg: 767
martine martine är inte uppkopplad
Mycket flitig postare
martines avatar
 
Reg.datum: Mar 2005
Inlägg: 767
Jag för min del använder $var = (int)$_GET['var']; vilket gör samma sak som BjörnJ:s kod.
Det finns även andra fördelar med att betrakta siffervärden som just siffror och att genomföra en injektion med enbart siffror lär nog vara helt omöjligt.

Dessutom Lando, så finns det ingen anledning att använda ' med nummer i din query eftersom det inte handlar om strängar...
martine är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 09:46 #6
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
eliasson eliasson är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Dec 2005
Inlägg: 1 863
Min rekommendation är att endast använda mysql_real_escape_string() vid in-data, och sedan använder du nödvändiga funktioner (t ex stripslashes() osv) när du skriver ut informationen.
eliasson är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 09:52 #7
emilvs avatar
emilv emilv är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Feb 2004
Inlägg: 1 564
emilv emilv är inte uppkopplad
Bara ett inlägg till!
emilvs avatar
 
Reg.datum: Feb 2004
Inlägg: 1 564
Min rekommendation är att köra PDO så slipper du tänka på SQL-injektioner. Då får du även fördelen att det blir lättare vid ett eventuellt byte av databasmotor.
emilv är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 11:33 #8
forngrens avatar
forngren forngren är inte uppkopplad
Flitig postare
 
Reg.datum: Jan 2004
Inlägg: 382
forngren forngren är inte uppkopplad
Flitig postare
forngrens avatar
 
Reg.datum: Jan 2004
Inlägg: 382
Prepared statements eller PDO som emil redan tipsat om är the shit.
forngren är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 12:18 #9
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
tartareandesire tartareandesire är inte uppkopplad
Supermoderator
 
Reg.datum: Jan 2004
Inlägg: 11 585
Just $_GET-variablerna är många som glömmer bort att skydda av någon anledning. mysql_real_escape_string är det som gäller "som vanligt".

Därutöver kan du alltid köra t.ex. intval när du ska ha ett heltal. Som martine påpekade är det onödigt att använda citattecken när det handlar om heltalsfält. Se istället till att du alltid skickar in ett heltal (den valideringen måste du ändå göra om sidan ska fungera som det är tänkt) så går sql-satsen något snabbare att exekvera. Det är bra att rutinoptimera kod så slipper man tänka på det när man väl arbetar med tyngre trafik.
__________________
Full-stack developer, free for smaller assignments
tartareandesire är inte uppkopplad   Svara med citatSvara med citat
Oläst 2010-03-31, 16:03 #10
Ara Ara är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2005
Inlägg: 1 956
Ara Ara är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Mar 2005
Inlägg: 1 956
SQL-injection, det va vär typ 7-8 år sedan det funkade? Eller är folk/siter fortfarande kassa på att skydda sig?
Ara är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 21:00.

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