TestMax.dk Paster
  • Forside
  • Print
  • Bookmark
  • Kontakt
  • SiteMap


infobox infobox
 

Sikre din mysql database

05-02-2007 10:14:30
 
 
Muligheder (Anmeld)
Skrevet af bl4ck
Kliks 584
Kategori PHP Guide's
Mange har efterhånden en hjemmeside med en mysql database, men mange ved ikke hvor meget skade en "hacker" eller "cracker" kan gøre på den hvis du ikke har beskyttet den. Heldigvis er det ganske simpelt!

Guiden er skrevet til folk der har en hvis forståelse for php og som kender alt til html og form's i forvejen

Vi skal bruge 2 sider.
function.php
post_news.php

functions.php
<?php
function secure($text) {
       $text = addslashes($text);
       $text = trim($text);
       $text = htmlspecialchars($text);
       return $text;
}
?>

så er det tid til at forstå koden.

function secure($text) {

function betyder vi starter en function, og secure() er navnet $text er den variable som vi ønsker og sikre.

$text = addslashes($text);
$text = trim($text);
$text = htmlspecialchars($text);

er tilføjer vi et " / " ved alle " ' " så de ikke fucker mysql kommandoerne op, og så laver vi alle <kommando>'er om så "<a>" fx kommer til at hedde "&lt;a&gt;" og er helt ufarlig.

return $text;

så retunere vi vores resultat.



post_news.php
<?php
<? include("functions.php"); ?>
if ($_POST['news_post']) {
       mysql_connect("host","brugernavn","password");
       mysql_select_db("database");
       $text = $_POST['text'];
       $text = secure($text);
       elseif (!$_POST['text']) {
              echo "Please fill in the text field, you are being redirected...";
              header("Refresh: 5; url=http://dinhjemmesideher.dk/post_news.php");
       }       
       else {
              echo "din tekst er nu sikret:<br />";
              echo $text;
       }
}
else {
?>
<form method="post" action="http://dinhjemmesideher.dk/post_news.php">
       <table border="0" cellspacing="0" cellpadding="0">
       <tr>
       <td>Text:&nbsp;</td>
       <td><input name="text" type="text" value="" /></td>
       </tr>
              <tr>
       <td height="10px"></td>
              <td></td>
       </tr>
              <tr>
       <td></td>
                      <td><input class="buttom" type="submit" name="news_post" value="Post" /></td>
       </tr>
</table>
</form>
<?php
}
?>


så kigger vi lige på den.
<? include("functions.php"); ?>
her loader vi functions ind i siden.
if ($_POST['news_post']) {
her tjekker vi om man har trykker på knappen
mysql_connect("host","brugernavn","password");
       mysql_select_db("database");
så connecter vi.
$text = $_POST['text'];[/
så smider vi indholdet fra boxen vi udfyldte over i $text
$text = secure($text);
her køre vi $text igennem vores function secure()
elseif (!$_POST['text']) {
              echo "Please fill in the text field, you are being redirected...";
              header("Refresh: 5; url=http://dinhjemmesideher.dk/post_news.php");
       }       
her tjekker den om vi har udfyldt boxen, hvis den er tom så skriver den en fejl og sender os tilbage til post_news.php
else {
              echo "din tekst er nu sikret:<br />";
              echo $text;
       }
så hvis du har udfyldt boxen så skriver vi texten som nu er sikret

resten er bare en alm. html form med en box og en knap.
.:. www.bl4ck-art.dk .:.
.:. brings darkness to life .:.
 
infobox infobox


infobox infobox
 
#1NoxiaZ(Anmeld) 05-02-2007 14:46:13
 
 
Og hvor ligger sikkerheden? ^^ - Kan kun se ubrugelig forklaring, som ikke holder stik med overskriften. :)
Tralalala?
 
infobox infobox

infobox infobox
 
#2V34(Anmeld) 05-02-2007 15:34:35
 
 
Black du har jo lige glemt den vigtigste strip_tags xD
Den kan du faktisk godt bare leve med. Både til MySQL queries og echo's. (:

NoxiaZ - læser du overhovedet hvad han skriver?
V34's signatur billede
 
infobox infobox

infobox infobox
 
#3bl4ck(Anmeld) 05-02-2007 16:05:29
 
 
#1 - "Guiden er skrevet til folk der har en hvis forståelse for php og som kender alt til html og form's i forvejen" burde være svar nok...

#2 - hmm strip_tags, why? htmlspecialchars() klare jobbet fint (kan tage fejl, men hva jeg lige hurtig kunne se på php.net er det nogenlunde det samme de gør)
.:. www.bl4ck-art.dk .:.
.:. brings darkness to life .:.
 
infobox infobox

infobox infobox
 
#4FairFight(Anmeld) 05-02-2007 16:17:39
 
 
Du kunne eventuelt forklare hvad en Hacker/Cracker kan gøre, hvis man ikke bruger en funktion som denne?
.
 
infobox infobox

infobox infobox
 
#5V34(Anmeld) 05-02-2007 18:11:29
 
 
Bl4ck htmlentities kan godt blive bypassed i nogle tilfælde fordi de bliver printet.
strip_tag fjerner de tags der kan blive lavet, fx. <script>alert('lol');</script> vil efterlade et uskyldigt alert('lol');

Det er en grundlæggende foreskel (: Men plejer normal at bruge $text = strip_tags(addslashes($text));
V34's signatur billede
 
infobox infobox

infobox infobox
 
#6bl4ck(Anmeld) 05-02-2007 18:16:33
 
 
#5 har testet den imod <script></script> og den laver det om så det er uskadeligt..
og på den her måde "sletter" du ikke noget, og derved kan du skrive fx. koder i dine news...

#4 kan uden problemer slette hele databasen eller få vist info fra den. (dog kun hvis du ikke beskytter dine forms)
.:. www.bl4ck-art.dk .:.
.:. brings darkness to life .:.
 
infobox infobox

infobox infobox
 
#7V34(Anmeld) 05-02-2007 18:26:45
 
 
Du kan ikke lave Javascript injections hvis du bruger strip_tags (:

#4
$sql = "SELECT * FROM admin_table_lol WHERE brugernavn = '$_GET[navn]'";

Forestil dig så du bytter $_GET[navn] ud med x' or DROP TABLE 'admin_table_lol
Det ville gøre ligende.
$sql = "SELECT * FROM admin_table_lol WHERE brugernavn = 'x' or DROP TABLE 'admin_table_lol'";


Dette kalder man SQL injection, og det er en part af Cross sitescripting / XSS


Dette skal ikke give nogle gode i idéer til folk, og antager ikke ansvaret for misbrug af det.
V34's signatur billede
 
infobox infobox

infobox infobox
 
#8bl4ck(Anmeld) 05-02-2007 18:57:30
 
 
du kan ikke javascript injecte imod htmlspecialchars(), da den laver koden til html text og derved gør den kode til "tekst" og så er den uskadelig...

du kan heller ikke lave SQL injection da jeg tilføjer slashes:

din x' or DROP TABLE 'admin_table_lol vil se sådan ud... bemærk at ' bliver til '/ og derved uskadelig
$sql = "SELECT * FROM admin_table_lol WHERE brugernavn = 'x'/ or DROP TABLE '/admin_table_lol'";


brugernavnet vil så være "'x'/ or DROP TABLE '/admin_table_lol" og den vile ikke skade databasen...

((jeg ved udemærket hva SQL injection er og ved derfor også hvordan du beskytter imod det...))
.:. www.bl4ck-art.dk .:.
.:. brings darkness to life .:.
 
infobox infobox

infobox infobox
 
#9V34(Anmeld) 05-02-2007 19:04:29
 
 
Det ved jeg nemlig også Bl4ck og jeg ved fra artikler hvordan folk har kunne bypass htmlentities(). (:
Så strip_tags er også et alternativ som jeg syntes du skal huske i din tutorial.

Dette var hele pointen med mit post.
V34's signatur billede
 
infobox infobox

infobox infobox
 
#10bl4ck(Anmeld) 05-02-2007 19:27:05
 
 
nu er htmlspecialchars() og htmlentities() ikke det samme :P

og ja, strip_tags er da nice, men hvis du nu skulle forklare noget hvor du bruger tags fx i en news post så er det jo rart at den laver det om til tekst istedet for at fjerne det helt (:
.:. www.bl4ck-art.dk .:.
.:. brings darkness to life .:.
 
infobox infobox

infobox infobox
 
#11NoxiaZ(Anmeld) 05-02-2007 21:01:56
 
 
#2 - Ja det gør jeg, og mener BESTEMT ikke han forklar TYDELIGT hvor sikker hedden ligger. Flot han laver en function som er STANDARD brug, når man laver offenligé submits...

Guiden er skrevet til folk der har en hvis forståelse for php og som kender alt til html og form's i forvejen

Har den forståelse for php, og kender alt til HTML og FROMS.. så er skal du nok også se de kender til htmlspecialchars() - Så måske det ... hva skal man sige, ubrugeligt for dem som har forståelse for det.. Du skulle nok overveje at lave det til folk der ikke har forståelse istedet ;)

God grineren, og ret dårligt.. Det er ikke noget med sikkerhed i denne "guide" er til - Da det er et komplet script, så folk skal "rippe" for at sikre deres egne script.. =)
Tralalala?
 
infobox infobox

infobox infobox
 
#12kar(Anmeld) 06-02-2007 02:52:50
 
 
hmm kan ikke se hvorfor du skal bruge trim
function clean($text) { return stripslashes(strip_tags(htmlspecialchars($text, ENT_QUOTES))); }

har fået noget hjælpe af en m8 men det virke
90% af alle teenagere ville dø hvis Arto havde en systemfejl og blev permanent lukket. Hvis du er en af de 10% der ville grine, copy & paste dette til din signatur.
 
infobox infobox

infobox infobox
 
#13FairFight(Anmeld) 06-02-2007 18:31:46
 
 
#6 - Hvordan gør de det :)? - For at lave den bedste sikkerhed skal man også selv kunne hacke. (Dårligt forumuleret, men ved ikke lige hvordan jeg ellers skulle skrive det ;D)
.
 
infobox infobox

infobox infobox
 
#14bl4ck(Anmeld) 06-02-2007 19:38:35
 
 
#13 læs evt. hva de andre skriver :P -> #7 <-
.:. www.bl4ck-art.dk .:.
.:. brings darkness to life .:.
 
infobox infobox

Påmindelse ved nyt svar

Ved at tilmelde dig automatisk påmindelse, modtager du en email så snart denne tråd bliver besvaret, dog sender vi kun en mail til dig, også selvom der er kommet flere svar, simpelthen for at spare dig for spam i din indbakke.


infobox infobox
  Svar på tråden  
   
 
 
infobox infobox

infobox infobox
  Læs dette før du sender dit indlæg!  
 
Ved tryk på send knappen accepterer du vores regelsæt som kan læses her
Praktiske informationer
Type Eksempel Resultat
Fed [b]din tekst[/b] din tekst
Kursiv [k]din tekst[/k] din tekst
Understreg [u]din tekst[/u] din tekst
Kode felt [code]din tekst[/code]
din tekst
infobox infobox