Avatar billede inferno89 Nybegynder
01. maj 2011 - 18:11 Der er 14 kommentarer

form data - undgå script sprog?

Hej, jeg er ny her på siden. :)
Jeg har et spørgsmål jeg ikke har kunnet finde svaret på på google eller i jeres arkiv.

jeg er ved at opbygge en hjemmeside med html php og mysql.

på den hjemmeside vil der være nogle input felter i en form.
Det virker i sig selv fint nok det hele, men er nu lidt længere i forløbet og er begyndt at tænke på sikkerheden ved at læse direkte fra formen og ind i mysql databasen, for man kunne jo faktisk skrive et script i formen, hvilket jo ikke ville være så godt.
fx kunne man jo slette filer osv på serveren

jeg går ud fra at jeg skal bruge en form for text validater, og har da også kigget lidt turtorials igennem, men uden at kunne finde ud af hvad man skal gøre for at undgå php og andre scripts

håber i kan hjælpe med dette
Avatar billede DonTorro Nybegynder
01. maj 2011 - 18:30 #1
Du skal bruge funktionen mysql_real_escape_string();
Husk at connect til databasen først :-)

Eksempel:
include('database.php');
$email = mysql_real_escape_string($_POST['email']);
Avatar billede conz Juniormester
01. maj 2011 - 18:31 #2
Så det du vil undgå er SQL-injections. Fornuftigt =)

En metode er at bruge mysql_real_escape_string, det i princippet tager en string, og prøver at sørge for at der ikke er indbygget nogen angreb i den.

Der er også en cleanQuery-funktion på dette site http://www.tech-evangelist.com/2007/11/05/preventing-sql-injection-attack/
der skulle være rimelig effektivt.

Udover det, så husk altid at sørge for at kontrollere tilladelserne for din database, sådan så der ikke er adgang til mere end højst nødvendigt.
Avatar billede The_Buzz Novice
01. maj 2011 - 18:50 #3
Undgå at blive udsat for SQL injections:
http://phptips.dk/brug_af_mysql_real_escape_string.tip
Avatar billede inferno89 Nybegynder
01. maj 2011 - 19:00 #4
så at sætte    
$tekst = mysql_real_escape_string($_POST["tekst"]);
$insert = mysql_query("INSERT INTO tekster (tekst) VALUES ('$tekst')");
ville være fint nok for at forhindre SQL injektion ?
man er self aldrig 100% sikker mht SQL injektion.
Avatar billede The_Buzz Novice
01. maj 2011 - 19:35 #5
inferno89: Det vil være mere sikkert end ikke at gøre det og som du selv konkluderer kan man aldrig være 110% sikker på noget...
Avatar billede inferno89 Nybegynder
01. maj 2011 - 19:36 #6
hvordan kunne jeg egentlig tjekke hvilke rettigheder man har til mysql databasen ?
Avatar billede conz Juniormester
01. maj 2011 - 19:46 #7
Det kan gøres gennem phpMyAdmin panelet, som du nok kan finde i kontrolpanelet hos din hostingudbyder.
Avatar billede inferno89 Nybegynder
01. maj 2011 - 20:19 #8
jeg kan ikke se rettighederne via phpmyadmin, eller jeg kan ikke finde det ihvertfald. kan du guide lidt derhen af ?
Avatar billede conz Juniormester
01. maj 2011 - 21:03 #9
Det burde vidst være et sted under "Privileges" hvis jeg husker rigtigt.
Avatar billede inferno89 Nybegynder
01. maj 2011 - 21:44 #10
nogen der kan hjælpe mig med hvad jeg skal skrive for at se om der bliver blokeret for sql injection jeg har prøvet mange forskellige koder og har selv lavet nogle men sys aldrig det virker
har lavet en lille test side UDEN protection den ser sådan her ud:

$brugernavn = $_POST["brugernavn"];
$password = $_POST["password"];
$user = mysql_query("SELECT * FROM bruger WHERE brugernavn='$brugernavn'");
if(mysql_num_rows($user) == 0)
{
    $error .= "Brugeren eksisterer ikke.";
}
else
{
    $userArray = mysql_fetch_array($user);
   
    if($userArray["password"] != $password)
    {
        $error .= "Password og brugernavn passer ikke sammen.";
    }
}

har prøvet med '") OR 0'='0; //
så der vil stå
$user = mysql_query("SELECT * FROM bruger WHERE brugernavn=''") OR '0'='0'; //'");
den skriver bare brugeren eksisterer ikke

dette er bare for at se om min side er beskyttet mod det, så derfor må man finde en "kode" som kan knækkes og så se når der er blevet forbedret om den så stadig kan knækkes.
Avatar billede conz Juniormester
01. maj 2011 - 22:18 #11
Prøv at kigge på de her to sider, se om du kan finde noget brugbart:
http://en.wikipedia.org/wiki/SQL_injection
og
http://www.unixwiz.net/techtips/sql-injection.html

fra den første er der fx
' or '1'='1' -- '
' or '1'='1' ({ '
' or '1'='1' /* '
eller
a';DROP TABLE `users`; SELECT * FROM `userinfo` WHERE 't' = 't

Den anden ser ud til at være lidt mere detaljeret, mere trin-for-trin, så måske prøve med den, hvis du ikke kan få det andet til at virke.
Avatar billede wanze Nybegynder
01. maj 2011 - 23:09 #12
Der kan også ske mange andre dumme ting end SQL injections. Hvis de her på Eksperten.dk fx ikke sørgede for, at HTML/JavaScript bliver behandlet, ville jeg kunne skrive et JavaScript i tekstfeltet, der så ville blive kørt på alle de computere, der åbner tråden. Måden den slags kan undgås på er ved at køre htmlentities() på al input.
Avatar billede inferno89 Nybegynder
02. maj 2011 - 17:12 #13
nu har jeg prøvet med en masse forskelligt men intet ser ud til at virke, og de ter på en form der ikke har beskyttelse, så noget må jeg gøre galt.
Avatar billede inferno89 Nybegynder
02. maj 2011 - 17:25 #14
betalyte hvis du sender svar får du point
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
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

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