Jamen dog! Hvor er det JavaScript henne?
Din browser understøtter ikke JavaScript eller har ikke understøttelsen slået til. Slå JavaScript til i din browser for at se denne side ordentligt, eller opgrader til en browser, der understøtter JavaScript.
Besøgende online nu
Gæster online 11
Brugere online 0

Antal brugere: 185
Nyeste bruger: Mrnight
Artikler

Hvordan skriver man en sikker infusion/modifikation?

Hvordan skriver man en sikker infusion/modifikation?
af Wooya

Som vi alle ved, skrives Sikkerhed ved CMS-systemet "PHP-Fusion" med stort. Der eksisterer foruddefinerede funktioner i PHP-Fusion, som alle gør infusioner og modifikationer mere sikre. I den efterfølgende artikel beskriver jeg, hvilke fumktioner det er og hvordan man benytter dem.

Hvordan skriver man en sikker infusion/modifikation?
af Wooya
tysk oversættelse ved Sebastian Schüssler

Som vi alle ved, skrives Sikkerhed ved CMS-systemet "PHP-Fusion" med stort. Der eksisterer foruddefinerede funktioner i PHP-Fusion, som alle gør infusioner og modifikationer mere sikre. I den efterfølgende artikel beskriver jeg, hvilke fumktioner det er og hvordan man benytter dem.

1) Brugerrettigheder:
For at efterprøve en brugers rang/niveau eller tilhørsforhold til en gruppe, benyt da konstanterne iGUeST, iUSeR, iMeMBeR, iaDMIN, iSUPeRaDMIN, iUSeR_RIGHTS, iUSeR_GROUPS og funktionerne checkrights(), getuserlevel(), checkgroup(), groupaccess().
Undlad selv at skrive "bedre" kald ;)

2) MySQL-kald:
anvend altid de interne MySQL-funktioner i PHP-Fusion, for at udføre dine datakald:
- dbquery() - sender en forespørgsel til MySQL
- dbrows() - leverer antallet af af dataposter i resultatet
- dbcount() - tæller data i resulatet
- dbresult() - leverer resultat
- dbarray() - giver en datamængde som associeret array
- dbarraynum() - giver en datamængde som nummerisk array

Disse funktioner burde være nok til de sædvanlige datakald.

Tip: Forsøg at optimere dine datakald. Det er jo ikke så smart, når tusinder af datakald gennemføres når siden indlæses ;)

3) $_POST og $_GeT:

a) Glem aldrig, at efterprøve alle brugerinput for farlig HTML eller at tjekke PHP-kode og husk "aflusning"!
anvend funktionen stripinput() før du lader noget blive skrevet i dine MySQL-tabeller.

eksempel:
$user_data = stripinput($POST['user_data']).

Denne funktion erstatter den eventuelle farlige kode med html-tegn

b) Når din POST/GeT-variabel skal være et tal, så benyt funktionen isNum().
Når det formidlede tal skal benyttes i et MySQL-kald, så kan du fx anvende følgende kode, før du skriver noget i din MySQL-tabel:

if (!isNum($_POST['my_number'])) fallback("index.php");

eller også:

$userzahl = isNum($_POST['user_zahl']) ? $_POST['user_zahl'] : $festgelegte_zahl;

Vær opmærksom på:
- send aldrig følsomme data som kodeord via GeT
- forsøg altid at arbejde med ID-felter i din MySQL-database. Det er nemmere og mere sikkert. Det er meget nemmere at efterprøve om værdien er nummerisk (med funktionen isNum().), end at skulle parse en streng og efterprøve om den er sikker eller ej.

4) diverse sager:
- anvend altid følgende kode i begyndelsen af administrationsområdet i infusioner:
if (!checkrights("IP")) fallback(BaSeDIR."index.php");

- anvend altid følgende kode i starten af infusions-scriptet (element):
if (!defined("IN_FUSION")) { header("Location:../../index.php"); exit; }

- anvend altid følgende kode i begyndelsen af include-data:
if (!defined("IN_FUSION")) { header("Location:../index.php"); exit; }

- Opret en tom index.php i din infusions folder.

- efterprøv altid uploadede billeder med funktionen verify_image().

- efterlad ingen e_notice advarsler. Husk at erklære variabler med standard-værdier.

eksempel på erklæring:

$otherdata = 'a';
$data = array('b', 'c', 'd');
for ($i=0;$i
if ($otherdata==$data[$i]) $result = "OK";
}
$final_result = $result;

Scriptet ovenfor vil give en e_notice advarsel: Variable $result not defined at line XXX.
Den efterfølgende kode vil ikke give nogen e_notice advarsel:

$otherdata = 'a';
$data = array('b', 'c', 'd');
$result = "DeFaULT VaLUe"; // denne sætning fikser advarslen
for ($i=0;$i
if ($otherdata==$data[$i]) $result = "OK";
}
$final_result = $result;


Denne artikel omfatter ikke alle sikkerhedsmæssige skrivemåder, men skal være med til at skrive mere sikre infusioner og modifikationer i PHP-Fusion.

I tilfælde af at der dukker flere spørgsmål op, så stil dem venligst i debatforum!

Denne artikel må ikke videregives/anvendes uden min tilladelse.

[Originale tyske oversættelse]
[Wooyas artikel]

Dansk oversættelse v. Helmuth Mikkelsen


Tekster fra PHP-Fusion.dk må kun gengives med tydelig kildeangivelse og efter tilladelse fra forfatteren.

helmuth April 23 2007 4817 visninger 1 kommentar Udskriv

1 kommentar

Skriv en kommentar

Du skal logge ind for at kommentere.
  • J
    Godt initiativ, Helmuth
    - April 23 2007 20:44:18
    Log ind
    Er du endnu ikke registreret bruger? Klik her for at oprette dig.
    Glemt kodeord?