WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   "pausa" en while-loop, och sen låta den fortsätta (https://www.wn.se/forum/showthread.php?t=1052732)

captaindoe 2012-03-22 15:32

Absolut. Jag skulle föreslå följande:
PHP-kod:

$races = array('kvinna''man''barn');
if (isset(
$race_sort) && in_array($race_sort$races)) { 
    
$query .= "AND race = '" mysql_real_escape_string($race_sort) . "' ";


Eftersom man inte vill att queryn ska byggas upp av vilka textstränger som helst.

jonssondesign 2012-03-22 16:34

Läste lite på php.net om mysql_real_escape_string, men förstod inte speciellt mycket om det.

Känner någon att hen vill berätta för mig varför man skall använda den funktionen i denna?

captaindoe 2012-03-22 18:00

Låt oss säga att du har en sökfunktion och du hanterar den såhär:

PHP-kod:

mysql_query("SELECT * FROM search WHERE text='" $_GET['search'] . "'") or die(mysql_error()); 

Om en person skriver in:

Kod:

'; DROP TABLE search;
när de använder din sökfunktion kommer alltså din MySQL query att bli följande:

Kod:

SELECT * FROM search WHERE text=''; DROP TABLE search; '
Vilket är två stycken MySQL queries, den första queryen som hämtar all info från tabellen search, och den andra queryn raderar hela din tabell.

Om du använder
PHP-kod:

mysql_real_escape_string() 

så kommer frågan att se hur såhära:

Kod:

SELECT * FROM search WHERE text='\'; DROP TABLE search; '
Vilket betyder att MySQL endast kommer att se det som en fråga eftersom ' är "utkommenterat".

(Ber om ursäkt för min försvenskning av de engelska orden).

Jine 2012-03-22 18:15

Det captaindoe skrev fungerar dock inte i praktiken (iom att du inte kan köra dubbla queries i en mysql_query())

MEN!!!! Det är vääldigt viktigt att ALDRIG lita på NÅGOT användaren skriver, escape:a och rensa alltid, allt!

Enklaste sättet är att göra såhär:

$minvariabel = mysql_real_escape_string($_GET['var']);

På... allt :)

jonssondesign 2012-03-22 19:56

Jag förstår!

Det är med andra ord, väldigt dumt att inte använda mysql_real_escape! :P

Jake.Nu 2012-03-23 01:00

Ger man en normal klient rättigheter att köra "DROP TABLE" så är man nog fel ute på annat håll..
Använder man 'prepared statements' så är det säkert mot denna typen av injektioner i.a.f.

jonssondesign 2012-03-23 10:21

Jake, du förstår det att jag har hållit på med php i drygt 5 dagar nu, 3 dagar när jag först la ut tråden.

Så jag hoppas du förstår att mina kunskaper om hur allt fungerar, och vad som kan hända pga vissa saker, inte riktigt har trängt in i min hjärta ännu :P Men de kommer!

tartareandesire 2012-03-23 10:50

jonssondesign, du kan vara lugn. De flesta nybörjare gör det där misstaget och även många som sysslat med php betydligt längre än dig. En del anser uppenbarligen att man ska kunna allting redan innan man börjar koda :) Det är inte mycket att bry sig om, det är bra att du tar till dig saker och ting och försöker lära dig ordentligt.

Jawn 2012-03-23 12:05

Om du ska lära dig koda så börja leka med MYSQLI Prepare statements http://www.php.net/manual/en/mysqli.prepare.php

tartareandesire 2012-03-23 12:19

Citat:

Ursprungligen postat av Jawn (Inlägg 20435791)
Om du ska lära dig koda så börja leka med MYSQLI Prepare statements http://www.php.net/manual/en/mysqli.prepare.php

Man får nog en bättre förståelse för språket och programmering överlag om man lär sig vanliga "gamla" mysql-kommandon först tror jag. Beror väl lite på vilket syfte man har. Prepared statements är helt klart enklare om man vill undvika problem.


Alla tider är GMT +2. Klockan är nu 11:35.

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