webForumDet fria alternativet

Ogiltiga tecken vad jag än gör.

ASP

28 svar · 1 957 visningar · startad av Akerlundh · sida 2 av 2

Frågan, av Akerlundh

Hejsan jag försöker fixa en INSERT INTO kod snutt. Men vad jag än gör så får jag felmeddelandet ogiltiga tecken. Den koden använder jag mig utav nu men funkar inte endå och har testat vända och vrida på det hur mycket som helst. strTitle = request.form("titel") strTime = Date() strNews = request.form("news") strAktiv = request.form("aktiv") SQL=”Insert Into news(title,time,news,aktiv) Value

Läs frågan i sin helhet →
Medlem sedan okt. 20041 556 inlägg
Medlem sedan okt. 20041 556 inlägg
#22

I ett större sammanhang är det livsfarligt att mata in formulärvärden direkt i din sql.
Det är också bra att köra felhantering på tomma strängar ickenumeriska format osv. på värdena som skall in innan man pangar på så där,,,

Medlem sedan maj 20031 682 inlägg
#23

Travoni skrev:

I ett större sammanhang är det livsfarligt att mata in formulärvärden direkt i din sql.
Det är också bra att köra felhantering på tomma strängar ickenumeriska format osv. på värdena som skall in innan man pangar på så där,,,

Okej hänger inte med men få läsa på lite om sql injection då.

Medlem sedan maj 20031 682 inlägg
#24

------

Medlem sedan juni 20019 519 inlägg
#25

Kan ta exemplet som spango skrev igår till golgata (http://www.webforum.nu/showthread.php?t=165970):Om någon nu skulle skriva in texten: bye bye'; drop table myLonlyTable; -- i din strTitle så kommer din sql se ut om vi har en sql:

Select * from myLonlyTable Where username = '" & strUsername & "'"

Om vi skriver ut sql frågan rakt upp och ner kommer den se ut:

Select * from myLonlyTable Where username = 'bye bye'; drop table myLonlyTable; --'

username avslutas, vi har en ; för att kunna lägga in en ny SQL fråga och vips så är myLonlyTable helt borta. De vanligaste skydden är att ersätta ' till två '' för att inte bryta strängen.

Medlem sedan maj 20031 682 inlägg
#26

voigtann1 skrev:

Kan ta exemplet som spango skrev igår till golgata (http://www.webforum.nu/showthread.php?t=165970):Om någon nu skulle skriva in texten: bye bye'; drop table myLonlyTable; -- i din strTitle så kommer din sql se ut om vi har en sql:

Select * from myLonlyTable Where username = '" & strUsername & "'"

Om vi skriver ut sql frågan rakt upp och ner kommer den se ut:

Select * from myLonlyTable Where username = 'bye bye'; drop table myLonlyTable; --'

username avslutas, vi har en ; för att kunna lägga in en ny SQL fråga och vips så är myLonlyTable helt borta. De vanligaste skydden är att ersätta ' till två '' för att inte bryta strängen.

Nu hänger jag inte med.
Ska man skriva drop table i varje sql sats eller hur menar du nu?

/red
Eller menar du att jag ska använda mig utav "". ?

Medlem sedan juni 20019 519 inlägg
#27

En sträng skall vara med ' och om du inte akta dig så kan man ta bort hela tabellen med exemplet ovan:

Select * from myLonlyTable Where username = 'bye bye';
drop table myLonlyTable;
 --'

Om du slänger in

bye bye'; drop table myLonlyTable; --

som din strUsername.
Om du ersätter ' med två st ': '' så bryter du inte strängen utan då blir den:

Select * from myLonlyTable Where username = 'bye bye''; drop table myLonlyTable; --'

och på så sätt blir den säkrad över den absolut enklaste SQL-injection.

En klassisk web-strip om sql injection: http://www.thedaytoday.com/wp-content/uploads/2007/10/exploits_of_a_mom.gif

Medlem sedan maj 20031 682 inlägg
#28

voigtann1 skrev:

En sträng skall vara med ' och om du inte akta dig så kan man ta bort hela tabellen med exemplet ovan:

Select * from myLonlyTable Where username = 'bye bye';
drop table myLonlyTable;
 --'

Om du slänger in

bye bye'; drop table myLonlyTable; --

som din strUsername.
Om du ersätter ' med två st ': '' så bryter du inte strängen utan då blir den:

Select * from myLonlyTable Where username = 'bye bye''; drop table myLonlyTable; --'

och på så sätt blir den säkrad över den absolut enklaste SQL-injection.

En klassisk web-strip om sql injection: http://www.thedaytoday.com/wp-content/uploads/2007/10/exploits_of_a_mom.gif

Aha, det kan ju va bra och veta.

Tack för tipset!

/red

Men om det handlar om datum/tid eller ett tal då ska man inte behöva göra så eller?
för man ska ju inte han några ' runt dom.

Medlem sedan juni 20019 519 inlägg
#29

Akerlundh skrev:

Men om det handlar om datum/tid eller ett tal då ska man inte behöva göra så eller?
för man ska ju inte han några ' runt dom.

Om du ska ha datum:
CDate(dtmMyDate)
Tal:
CLng(intMyNumber)

Om du vet att det är ett datum se till att försöka konvertera det till ett datum. Om det inte går så är det förmodligen inget datum användaren försöker skicka in. "Bättre" att få crash på att den inte kan konvertera data typen till ett datum än att den skall få lägga in datan i din databas. För du kan alltid kolla om den går att konvertera om det inte går så kan du visa egna fel att det inte är rätt data dom försöker skicka in och be dom göra om det.

280 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
154 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)