Check for SQLi eller XSS

Tags:    php sikkerhed hjaelp

Jeg har brug for nogen til at tjekke min hjemmeside for SQLi eller XSS sårbarheder.

Her: http://heavyworld.org



9 svar postet i denne tråd vises herunder
2 indlæg har modtaget i alt 6 karma
Sorter efter stemmer Sorter efter dato
Dette kan selvfølgelig være, rigtigt at dette kan ændres af klienten. Men, hvad ville du bruge det til i det tilfælde, hvor at det er ID på en guitarist, brugeren kan jo kun ændre en værdi, og få fat på en ny guitarist side.

Eller, har du set eksempler nogle andre eksempler, på hvor en side, der blev genereret dynamisk, kunne bruges til noget, den ikke var udviklet til at skulle ? (Nu bliver man jo helt nysgerrig :))


Jeg har ikke testet på hans side, men forestil dig følgende scenario.

Du har side, som viser indhold udfra et id:

index.php?id=1

Hvilket serverside vil udføre en lignende sql:

select * from tabel where id=1

Nu prøver vi at smide to forskellige statements mod databasen:

index.php?id=1 and 1=2
index.php?id=1 and 1=1

Hvis vi er "heldige", så vil de to siders output, først vise os ingenting og derefter indholdet med id=1. Der er således åbent for at lave boolske tjeks på databasen!

Vi kan også tjekke boolske udtryk, med at injecte delays.

index.php?id=1 UNION SELECT IF(SUBSTRING(user_password,1,1) = CHAR(97),BENCHMARK(5000000,ENCODE('MSG','by 5 seconds')),null) FROM users WHERE user_id = 1;

Hvis brugeren med id=1 har et password der starter med 'a' forsinkes siden med 5 sekunder. Det kræver lidt info om databasens tabeller, men hvis der er åbent, så er det kun et spørgsmål om (meget) tid.

Jeg ved godt, at alt dette er lidt teoretisk. Men en dør der står på klem, er også åben.



Indlæg senest redigeret d. 16.04.2012 20:07 af Bruger #955

Og det er kun, hvor du har bruger input, du skal tænke på SQL injection og Cross site scripting.


Dette er forkert. Alle sider der genereres dynamisk, udfra variabler der kan modificeres af klienten, kan være et mål.

http://heavyworld.org/guitarists/guitarist.php?gui_ID=1



Medmindre du har konkret bevis for at det er din side, er der nok ikke nogne der begynder at gå den vildt meget i trådene. Derudover vil du få en meget bedre analyse af din hjemmeside hvis du bare viser os kildekoden...



Hey Ozzy,

Nu da jeg faktiskt, ved at denne hjemmeside er din, har jeg ikke noget problem med at kigge lidt nærmere på det :)

Så vidt, jeg kan se modtager du, ikke rigtigt bruger informationer, udover når brugerne skal poste deres videoer de har uploadet til youtube. Og det er kun, hvor du har bruger input, du skal tænke på SQL injection og Cross site scripting. Så, du behøver ikke tænke særligt meget på sådanne ting, som din website ser ud pt, dog er denne side http://heavyworld.org/yourtalent.php en undtagelse, da jeg går udfra, at de urls til youtube videoer, som brugerne uploader, bliver gemt i en eller anden database, så her er der mulighed for at benytte sig af SQL injection.

Hvis du gerne vil vide, lidt om hvordan man gør dette, har man en mulighed for at læse det her: http://php.net/manual/en/security.database.sql-injection.php





Kan jeg godt se nu efter din forklaring, tak fordi du tog dig tiden til det :)



Dette er forkert. Alle sider der genereres dynamisk, udfra variabler der kan modificeres af klienten, kan være et mål.


Alle variable som kan sættes af klienten er brugerinput.
Det gælder også headere.



Dette er forkert. Alle sider der genereres dynamisk, udfra variabler der kan modificeres af klienten, kan være et mål.


Alle variable som kan sættes af klienten er brugerinput.
Det gælder også headere.


Jeg er tildels enig med dig, men jeg er bare ikke glad for at kalde det brugerinput, hvis brugeren ikke gør noget aktivt. Selvom om flere og flere informationer der lagres på nettet, netop handler om alt det brugerne ikke fortæller :). Jeg kan dog ikke umiddelbart finde på et, bedre udtryk.





Jeg forstår hvad du mener, men brugeren kan manipulere med hele HTTP forespørgslen, og derfor er både request metoden, stien, HTTP versionen, host headeren, dato headere, alle øvrige header og evt. POST data bruger input.

I andre systemer hører tastatur tryk, bevægelser med musen, environment variable, kommandolinje argumenter og filer også bruger input.

Alt som brugeren kan manipulere og levere til systemet er input.

Det er også dét, man som udvikler, skal tage højde for. ALT er farligt og skal valideres.



Dette kan selvfølgelig være, rigtigt at dette kan ændres af klienten. Men, hvad ville du bruge det til i det tilfælde, hvor at det er ID på en guitarist, brugeren kan jo kun ændre en værdi, og få fat på en ny guitarist side.

Eller, har du set eksempler nogle andre eksempler, på hvor en side, der blev genereret dynamisk, kunne bruges til noget, den ikke var udviklet til at skulle ? (Nu bliver man jo helt nysgerrig :))



t