Just nu i M3-nätverket
Gå till innehåll

Säkerhetsrisk att filtrera via öppen WHERE?


Jakob Nanneson

Rekommendera Poster

Jakob Nanneson

Är det en säkerhetsrisk om jag öppnar upp så att användare själva kan filtrera sina sökningar genom att själva välja vad som ska stå efter WHERE?

Länk till kommentar
Dela på andra webbplatser

Daniel Wahlgren

Ja, eftersom de då kan skriva en till sql-sträng. Om du har denna:

 

$Where = "ID = 1; Select username, password from tbl_Users";

 

$SQL = "Select Namn, Hobby from tbl_Users where ".$Where.";";

 

Hur man skriver beror ju på vilket språk man använder, men jag antar att du förstår hur jag menar.

 

Vad man kan göra är förståss att man kontrollerar strängen, men det är mycket som i så fall skall kontrolleras.

 

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

 

Länk till kommentar
Dela på andra webbplatser

Jakob Nanneson

Jag kör MySQL, vilket jag har för mig inte hanterar ";". SELECT-grejerna har jag redan angett så dessa går ju inte att ändra, hm...

 

Vart ligger säkerhetsrisken då jag använder MySQL samt asp?

 

Förslag på kontroll av stäng i asp föresten?

 

Länk till kommentar
Dela på andra webbplatser

Man parsar ut främst ' och ; helt enkelt från strängarna som du använder i frågan och kommer utifrån på något sätt (formulär, querystring...etc).

 

En enkel replace eller något mer "avancerat" med en regexp som parsar ut allt som inte är godkända tecken.

 

[inlägget ändrat 2002-07-30 17:27:10 av Xyzz]

Länk till kommentar
Dela på andra webbplatser

Daniel Wahlgren

Hm... det beror ju på hur innehållet ser ut, men om man skall kunna göra en filtrering på textfält så kan man ju inte ta bort '.

 

 

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

 

Länk till kommentar
Dela på andra webbplatser

Ne, men man replacar isåfall med '' (alltså två single qoutes ).

 

Sedan, ifall man har ett villkor med ett numeriskt värde så kollar man naturligtvis med IsNumeric innan man konstruerar frågan och exekverar.

 

[inlägget ändrat 2002-07-30 17:37:02 av Xyzz]

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

I MySql gäller följande:

 

Du lägger in \ före ' och ".

Alla värden, såväl numeriska som datum och text skrivs inom '.

 

Exempel:

 

WHERE id = '5'

WHERE text LIKE 'what\'s'

 

 

Länk till kommentar
Dela på andra webbplatser

Daniel Wahlgren

Vad menar du med plocka bort "? Finns ju inga...

Varför replaca ' med ''?

Sedan så skulle väl användaren få skriva wheresatsen, alltså vet man inte i förväg om fältet som skall filtreras är ett numeriskt fält.

 

Eftersom det mycket väl kan vara tillåtet att skriva "where name = 'Daniel'" så kan man ju inte filtrera bort ' till '' då de tar ut varandra. ej heller kan man filtrera bort ", då de inte existerar. Man kan inte heller kontrollera med IsNumeric då det inte skall vara ett numeriskt värde...

 

 

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

 

Länk till kommentar
Dela på andra webbplatser

Daniel Wahlgren

kan man även sätta permissions på vissa kolumner? Ifall man har en databas med användarnamn och lösen tillsammans med annat men inte använder sig av kryterade lösenord i databasen? (Varför man nu inte skulle göra det, men ändå)

 

[EDIT]Hittade, ja det kan man.[/EDIT]

 

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

 

[inlägget ändrat 2002-07-30 18:01:33 av Daniel Wahlgren]

Länk till kommentar
Dela på andra webbplatser

Thomas Tydal

> kan man även sätta permissions på

> vissa kolumner?

 

Ja.

 

Rättigheter kan man ge efter användare, ip-adress de ansluter från, databaser, tabeller och kolumner.

 

 

Länk till kommentar
Dela på andra webbplatser

Jakob Nanneson

Tyvärr kan jag inte sätta egna permissions, men jag har enligt diskussionen förstått att jag kan göra följande:

 

1. Ta bort " samt ; från sträng. (om " finns så avslutas sql-sträng, eller?)

 

2. WHERE står redan i sql-satsen, det användaren får välja är vad som ska stå efter. T ex "artist LIKE 'abba' AND price < 50".

 

Har jag missat något?

 

Länk till kommentar
Dela på andra webbplatser

Daniel Wahlgren

Eftersom de skall få söka efter texter så kan man ju inte parsa bort ' eftersom '' gör att det inte handlar om 'text' längre utan nummer. Om man nu skall få söka efter text kan man därför inte heller anta att det är nummer och då köra IsNumeric.

 

Eller är jag helt ute och cycklar när jag säger att han även vill att besökarna skall kunna söka på text såväl som nummer?

 

Råkade besvara fel inlägg :o

Detta var menat till xyzz

 

2. WHERE står redan i sql-satsen, det användaren får välja är vad som ska stå efter. T ex "artist LIKE 'abba' AND price < 50".

 

Detta visar att jag inte var ute och cycklade i alla fall.

 

Om man byter ' till '' blir det ju en sökning efter siffran 'abba' (iom ''abba'') eller hur?

Och IsNumeric skulle bli False och därmed skulle det heller ej fungera.

 

 

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

 

[inlägget ändrat 2002-07-30 18:31:30 av Daniel Wahlgren]

Länk till kommentar
Dela på andra webbplatser

Jakob Nanneson

Enkelfnutt kan man inte ta bort eftersom den visar vilken text som ska användas efter en LIKE-grej.

 

Dubbelfnutt ska bort eftersom det avslutar sql-strängen. Vet inte hur pass mycket den förstör med kan kan tänka mig följande:

"SELECT * FROM skivor WHERE artist LIKE " & Session("password") & " LIMIT 500"

 

Användaren har alltså skrivit in följande:

artist LIKE " & Session("password") & "

 

IsNumeric vet jag inte alls hur man ska använda om användaren får skriva i ett fritextfält.

 

price < 30

 

Inte ens enklaste exemplet ovan är inte "numeric", i så fall ska man kolla så att "sak efter = eller < >" är nummer. Men varför?

 

Länk till kommentar
Dela på andra webbplatser

Ja, i detta fall har jag tydligen missuppfattat frågan, jag hajade inte att han ville ha in en HEL where sats från användaren.

 

Nej då kan man ju inte parsa någonting egentligen utan han får som föreslagits använda en användare med begränsade rättigheter.

 

Vad jag pratar om är (som jag hela tiden sagt ochså) när du får in strängar ifrån tex ett formulär och ska sätta ihop dessa i en fråga.

 

Då SKA man man ersätta ' med '' eller i detta fall \' samt verifiera numeriska värden, helst ska allt bakom ; rensas bort ochså.

 

[inlägget ändrat 2002-07-30 19:29:34 av Xyzz]

Länk till kommentar
Dela på andra webbplatser

Jakob Nanneson
Nej då kan man ju inte parsa någonting egentligen utan han får som föreslagits använda en användare med begränsade rättigheter.

 

Tyvärr kan jag inte lägga till nya användare, går det inte att bara ta bort följande tecken då?

 

" ;

 

Länk till kommentar
Dela på andra webbplatser

Det är inte dubbla single qoute som är problematiska utan en enkel single qoute.

 

Tex skulle denna sats genera ett fel:

 

str = "sadfa 'sdsa"

sql = "select * from tabell where blaha='" & str & "'"

 

Därför bör i normala fall ' ersättas med '' om du kör MS SQL och Access, eller escapas med \' i MySQL, eller tas bort helt.

 

I ditt fall är det problematiskt eftersom du vill ha in ett helt villkor, du kan ju då inte ersätta ' alls eftersom de kan behövas runt strängar i själva frågan.

 

Det finns inget riktigt bra sätt om du inte kan använda en användare med begränsade rättigheter.

 

[inlägget ändrat 2002-07-30 20:09:53 av Xyzz]

Länk till kommentar
Dela på andra webbplatser

Jakob Nanneson

"str" hämtas från ett formulär och blir följande:

 

str = "blaha = 'sdsa"

sql = "select * from tabell where " & str

 

I detta fall ska det bli fel för användaren eftersom strängen är fel. Det är inget konstigt med det.

 

Om någon skriver ", måste denna tas bort eftersom strängen blir avslutad i och med tecknet. Visst?

 

Länk till kommentar
Dela på andra webbplatser

Jag vet inte riktigt om jag förstår dig längre, det finns inget speciellt med en dubbel qoute i en sträng som orsakar problem.

 

Det är klart att om man slänger in skumma tecken till sql satsen där den förväntar sig villkor och dylikt kan du få errors men huvudsaken är ju att de inte kan köra godtyckliga sql satser.

 

Om du verkligen vill köra på detta sätt och låta användarna stoppa in villkoren och du inte kan köra med en begränsad användare så kanske du ska ta bort nyckelord som select, delete, create, alter, insert, update...etc från det du får in.

 

[inlägget ändrat 2002-07-30 20:41:15 av Xyzz]

Länk till kommentar
Dela på andra webbplatser

Jakob Nanneson

Låter som ett bra förslag, ska kika närmre på det där. Kom gärna med fler förslag om vad som ska plockas bort under tiden.

 

Tack för all hjälp!

 

Länk till kommentar
Dela på andra webbplatser

Daniel Wahlgren

Tja... får man bort andra Select-, Update-, insert-satser så är ju säkerhetsrisken borta.

Då har ju du själv bestämmt vilka kolumner som får visas, samt från vilken tabell som information får hämtas ifrån.

 

 

**********

Om spelvåld påverkar unga, hur skulle pakmangenerationen se ut idag?

 

Länk till kommentar
Dela på andra webbplatser

Jakob Nanneson

Hur gör jag för att i asp ta bort alla dubbelfnuttar (")?

 

Replace(text,""","") går ju knappast.

 

(Jag skriver det här eftersom det hör till en annan tråd)

 

Länk till kommentar
Dela på andra webbplatser

Arkiverat

Det här ämnet är nu arkiverat och är stängt för ytterligare svar.

×
×
  • Skapa nytt...