Avatar billede rotco Juniormester
19. april 2009 - 13:40 Der er 9 kommentarer og
1 løsning

Er den her if(){ sikker nok?

Hej,

Jeg har fundet/lavet mig selv et "brugersystem", ment at jeg har fundet et brugersystem som jeg har gjort bedre og bedre.. Man kan oprette sig som bruger bla bla bla..

Det som jeg så fixe nu, er et admin system, som kører på samme login-system, ment på den måde at i min mysql database vil skrive "type", hvor der så er bruger & admistrator...

Så hvis man er admistrator, skal man have lov til at kunne se nogle links som almindelige brugere ikke vil være i stand til at se..

Eksempel:

<a href="index.php">Forside</a><br>
<a href="profil.php">Profil</a><br>
<a href="brugerliste.php">Brugerliste</a><br>
<a href="dine_film.php">Dine Film</a><br>
<a href="dine_spil.php">Dine Spil</a><br>

<?php
include "connect.php";
$query = mysql_query("SELECT type FROM 'members' WHERE username = '$_SESSION[myusername]'");
$row = mysql_fetch_array($query);

if($row[type] == "admistrator"){
echo "
<a href="slet_profiler.php">Slet Profiler</a><br>
<a href="slet_spil.php">Slet Spil</a><br>
<a href="slet_film.php">Slet Film</a><br>
";
}
?>


Er den her kode i sig selv sikker nok? Hvis ikke, hvad kan jeg så gøre for at gøre den sikker?

Det ovenfor er KUN et eksempel, og slet ikke testet eller implementeret endnu.
Avatar billede hmortensen Nybegynder
19. april 2009 - 13:53 #1
Ja, MEN husk at lave tjek på den pågældende side også!

Du kan evt. smide type i session også, så du ikke skal lave et opslag i databasen hver gang.
Avatar billede sorensen_123 Nybegynder
19. april 2009 - 15:16 #2
Ja, den er helt sikker så længe du kører tjekket på alle sider, hvor man skal være administrator.

Derudover skal du nok tænke på, hvordan du skriver din kode.

Du skriver echo " .... " med gåseøjne, selvom der ingen variabler er i stringen. Derfor skal du bruge '. Altså echo ' .... ';

Når du skriver gåseøjne bliver der søgt efter variable i din string, og det gør parsning længere :)

Det samme med if($row[type] == "administrator). Dette skulle være == 'administrator'.

Derudover skal du huske at skrive $row['type'], da der ellers vil fremkomme en fejl i din fejl-log pga. forkert scope.

Ellers ikke rigtigt noget. Husk at bruge <br /> og ikke <br>. I XHTML skal man angive self-closing tags:
<br />
<input type="text" name="navn" />
<hr />
etc.
Avatar billede repox Seniormester
19. april 2009 - 19:00 #3
@sorensen_123
Hvorfor fortæller du ham at det er forkert at bruge dobbelte quotes fremfor single quotes? Det er noget sludder - det er misvisende og giver et fejlagtigt indtryk.
Det er bedøvende ligegyldigt om man bruger single eller dobbeltquotes. Den _minimale_ forskel der er i parsingen af et PHP script er så marginalt lille at det ikke kan betale sig at snakke om den.
Hvis du mener jeg tager fejl, ser jeg gerne dokumentation for dette.
Avatar billede sorensen_123 Nybegynder
19. april 2009 - 19:07 #4
@repox: Du siger selv, at det gør en forskel i parsningen. Hvorfor ikke gøre ting rigtigt i første omgang i stedet for at bruge double-quotes?
Avatar billede repox Seniormester
19. april 2009 - 19:24 #5
@sorensen_123
At du gentager dig selv, gør ikke din påstand mere rigtig.
http://www.php.net/manual/en/language.types.string.php
Der er ikke tale om hvorvidt den ene metode er mere korrekt end den anden, hvilken jo er din påstand, som du blot gentager. Det eneste der taler for at benytte sig af single quotes er deres indledende tekst omkring strenge i single quotes.

Her citeres:
"The simplest way to specify a string is to enclose it in single quotes"

Så PHP holdets holdning er at det er den mest simple måde at angive en streng på.

$varOne = "Hello World";
$varTwo = 'Hello World';

Nu vil jeg meget gerne have dokumentation for at $varTwo er mere korrekt end $varTwo - for det er jo vigtigt det bliver gjort rigtigt i første omgang.
Avatar billede repox Seniormester
19. april 2009 - 19:25 #6
Der skulle selvfølgelig have stået:
Nu vil jeg meget gerne have dokumentation for at $varTwo er mere korrekt end $varOne
Avatar billede sorensen_123 Nybegynder
19. april 2009 - 19:34 #7
Det skal jeg fortælle dig. Har du været programmør i længere tid så vil du kende til ordet fejlsøgning og fejllogs. Med double-quotes er der større chance for, at der vil opstå fejl, mod single quotes som kun er til strings (men som kan indeholde variable med echo 'Hej '.$variabel.'. Hvordan går det?';). Dette gør også læsbarheden af koden bedre for alle andre programmører. Hvis du bliver uddannet programmør, så vil du også blive undervist i, at dette er den mest korrekte måde.

Ligeledes burde du skrive if('administrator' == $row['type']) for at undgå fejl. Det bruges mest i store programmer i desktop-miljøer (c++, c# etc.), da man, hvis man kommer til at skrive if($row['type'] = 'administrator') altid vil resultere TRUE, og LIGELEDES ændre array'en til "administrator".
Avatar billede repox Seniormester
19. april 2009 - 19:52 #8
Du kender ikke min baggrund og jeg kender ikke din, så lad venligst være med at udtale dig om noget du ikke ved noget om.

Udover det, så synes jeg ikke at bugsearching eller læsbarhed er passende dokumentation for at sige at single quotes er mere korrekt end double quotes - det er din (og tilsyneladende også din undervisers) subjektive mening.
Der er ikke noget i vejen for at tale for den vane man selv har og argumentere for den. Men at påstå at den ene er mere korrekt end den anden og i øvrigt ikke forholde sig til dokumentationen er ren arrogance.

Og hvorfor begynder du pludselig at snakke om rækkefølges af syntaksen? Den har jeg ikke på noget måde givet udtryk for at ville sætte spørgsmålstegn ved.
Avatar billede sorensen_123 Nybegynder
19. april 2009 - 20:01 #9
Jeg begyndte at snakke om syntaksen da jeg prøver at holde mig til det reele - HVAD SPØRGER VIL HAVE SVAR PÅ. Jeg har hverken brug for at dokumentere det ene eller andet - jeg er her for at svare på hvad brugeren spørger om, ikke drive ligegyldige diskussioner.

Jeg har aldrig sagt, at det er mere rigtigt at bruge single-quotes frem for double-quotes, jeg skrev blot, at han skulle tænke på, hvordan han skrev koden.
Avatar billede repox Seniormester
19. april 2009 - 20:11 #10
aha... det står vist fint for sig selv...
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester