Avatar billede andreas13_fam Nybegynder
10. marts 2009 - 19:15 Der er 13 kommentarer og
1 løsning

lidt om sikkerhed

Jeg ville da godt lære lidt om sikkerhed nu, men jeg syntes at det er meget svært at finde brugbare oplysninger om det.
Fx MySQL infection, her er rigtig mange forslag, men jeg har bare ikke en chance for at finde ud af hvad der er bedst, og mest opdateret.

Jeg har lavet et utestet dokument som eksempel:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Lidt op sikkerhed </title>
</head>
<body>

<form method="post" action="#">
<input type="text" name="tekst">
</form>

<?php
echo '
      <div style="width:300px;">
      '$_POST['tekst'].'
      </div>
    ';

mysql_query("INSERT INTO tekst (tekst) VALUES (".$_POST['tekst'].")") OR DIE(mysql_error());
?>

</body>
</html>

Så hvad har i af gode råd.
Avatar billede arne_v Ekspert
10. marts 2009 - 20:22 #1
Det der er ihvertfald ikke godt. Du er pivaaben for SQL injection.

Minimum noget PHP escaping.

Bedre MySQL escaping.

Bedst mysqli og parameters (eller PDO).
Avatar billede andreas13_fam Nybegynder
10. marts 2009 - 20:50 #2
Det der er ihvertfald ikke godt. Du er pivaaben for SQL injection.
Jamen det er lige præsis det jeg gik efter, efter som det er et eksempel. Men med alle de fag udtryk kan jeg finde en masse. Men jeg ved ikke hvordan det skal strikkes sammen.

PS: der vil ikke ske en dyt efter som den ikke er conekted
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Lidt op sikkerhed </title>
</head>
<body>

<form method="post" action="#">
<input type="text" name="tekst">
</form>

<?php
echo '
      <div style="width:300px;">
      '$_POST['tekst'].'
      </div>
    ';
mysql_connect("server", "brugernavn", "password") or die(mysql_error());
mysql_select_db("databasenavn") or die(mysql_error());
mysql_query("INSERT INTO tekst (tekst) VALUES (".$_POST['tekst'].")") OR DIE(mysql_error());
?>

</body>
</html>
Avatar billede andreas13_fam Nybegynder
10. marts 2009 - 20:53 #3
Jeg vil altså godt lære noget, og påfylde en ting af gangen på min dårlige PHP-fil så den bliver mere sikker hen af vejen
Avatar billede arne_v Ekspert
10. marts 2009 - 21:32 #4
Start med at laere mysqli og prepared statement (som parameters hedder i PHP).
Avatar billede zips Juniormester
10. marts 2009 - 22:58 #5
Måske dette kan hjælpe lidt med din sikkerhed http://www.eksperten.dk/spm/865377

Det skal dog siges at erikjacobsen også anbefalder mysqli som arne_v også gør.
Avatar billede andreas13_fam Nybegynder
11. marts 2009 - 15:06 #6
det virker ikke som om at PDO og mysqli er noget som kan bruges sammen, da de "gøre det samme".

Jeg har forsøgt med mysqli og det ser sådan ud nu.
Jeg er dog lidt i tvivl om det er den rigtige måde at udskive fejl på.
    else
    {
    printf("Errorcode: %s\n", $stmt->error);
    }

_____________________________________________

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
<title>Lidt op sikkerhed </title>
</head>
<body>

<form method="post" action="#">
<input type="text" name="tekst">
</form>

<?php
echo '
      <div style="width:300px;">
      '$_POST['tekst'].'
      </div>
    ';
$mysqli = new mysqli("localhost", "brugernavn", "kodeord", "databasenavn");
if (mysqli_connect_errno())
{
    printf("Fejl ved tilslutning: %s\n", mysqli_connect_error());
    exit();
}
    if ($stmt = $mysqli->prepare("INSERT INTO tekst (tekst) VALUES (?)"))
    {
    $stmt->bind_param("s", $_POST['tekst']);
    $stmt->execute();
    $stmt->close();
    }
    else
    {
    printf("Errorcode: %s\n", $stmt->error);
    }
$mysqli->close();
?>
</body>
</html>
Avatar billede arne_v Ekspert
11. marts 2009 - 15:19 #7
Ja - det er mysqli *eller* PDO.

Ovenstaaende skulle beskytte mod SQL injection.

Du boer dog stadig validere input for at beskytte mod XSS.

Med hensyn til fejl haandtering boer du overveje om du skal logge en teknisk fejlmeddelelse til admin og give brugeren en mere bloed besked.
Avatar billede andreas13_fam Nybegynder
11. marts 2009 - 16:52 #8
Jeg har nu også tænkt mig at logge fejlkode.
Men hvad er XSS og er der nogle funktioner man bør kende.
Avatar billede arne_v Ekspert
11. marts 2009 - 17:11 #9
Avatar billede andreas13_fam Nybegynder
12. marts 2009 - 15:27 #10
Okay nu tror jeg at jeg har nogen lunde styr på hvad XSS er, og der skal en del reg.exp. for at komme det til livs. Men er der andet end reg.exp der kan bruges.
Avatar billede arne_v Ekspert
12. marts 2009 - 15:47 #11
Du skal validere input.

Husk at du skal validere positivt (kun acceptere det som vi er 100% sikre paa er OK) ikke negativt (kun afvise det som vi er 100% sikre paa er farligt).

Regex er standard til rigtigt mange former for validering.
Avatar billede andreas13_fam Nybegynder
12. marts 2009 - 15:58 #12
Jamen tak for de gode råd. Er der nogen dre ville have point ?
Avatar billede arne_v Ekspert
12. marts 2009 - 16:03 #13
jeg samler
Avatar billede andreas13_fam Nybegynder
12. marts 2009 - 18:35 #14
Det kan jeg se :D
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