Struktur
- Input - henter informasjon fra GPCS
- Input_Item - håndterer dataene fra Input
- Validation - valideringsklassen
- Sanitation - manipulerer data
Biblioteket har jeg kalt PHP Security Wrapper (jeg er dårlig på navn).
Hjemmesiden inneholder kode-eksemplar på hvordan komme i gang, i tillegg til dokumentasjon.
Last ned
Last ned her (alltid siste versjon)
Eksempler
Helt enkelt - ingen sikkerhet
Henter ut verdien til "name" fra GET. Om ingenting er satt, skrives "Guest" ut.
- Kode: Merk alt
// initiate wrapper class
$input = new Input;
echo 'Welcome, ', $input->get ('name')->value ('Guest');
Helt enkelt - litt filtrering
Henter ut verdien til "name" fra GET og sjekker om den er en string. Om ingenting er satt eller filtreringen feiler, skrives "Guest" ut.
- Kode: Merk alt
echo 'Welcome, ', $input->get ('name')->apply_filter (FILTER_VALIDATE_STRING)->value ('Guest');
Helt enkelt - litt validering
Henter ut verdien til "name" fra GET. Det printes bare ut noe når $name inneholder alfanumeriske tegn.
- Kode: Merk alt
$name = $input->get ('name'); // Returns: Input_Item object
// Checks if $name contains alpha-numerical characters
if ($name->validate ('is_alnum')) {
echo 'Hello, ', $name->value ();
}
Hente "age" fra et GET Request, og validere denne
- Kode: Merk alt
if ( ($age = $input->get ('age')) AND $age->apply_filter (FILTER_VALIDATE_INT)->is_valid() ) {
// $age is now validated as integer
if ($age->validate ('min_length', 16)) {
// $age is at least 16
echo 'You are: ', $age->value(), ' Years old.';
}
}
Forklaring: Input::get, Input::post, Input::server, Input::cookie er metodene som henter ut informasjon, og returnerer et Input_Item objekt.
Argumentet til Input_Item::apply_filter() er en av disse typene.
Input_Item og Input inneholder bl.a. metodene validate() og sanitize (). Disse tar følgende parameter:
- Metode - hvilken metode som skal benyttes
Det siste parameteret (2. argument for Input_Item, 3. argument for Input) er $options. Dette er ikke nødvendig, og brukes bare i tilfeller hvor det må spesifiseres et alternativ (se eksempelet ovenfor).
Koden overfor er den samme for GET, POST, COOKIE og SERVER.
Skrive ut data fra MySQL
- Kode: Merk alt
$SQL = mysql_query ('SELECT foo FROM bar');
while ($Data = mysql_fetch_object ($SQL)) {
echo $input->sanitize ('xss_clean', $Data->content);
}
Siden Input_Item kun håndterer data fra GPCS, må vi bruke Input::validate og Input::sanitize når vi skal behandles strings.
Merk:
Validate-metoden (Input::validate og Input_Item::validate) kjører en metode i Validation-klassen.
Sanitize-metoden (Input::sanitize og Input_Item::sanitize) kjører en metode i Sanitation-klassen.
"Stand-alone" eksempel
Sanitation- og Validation-klassen er ikke avhengig av Input og Input_Item da de blir omtalt som "wrappere". Derfor kan disse brukes slik:
- Kode: Merk alt
$sanitation = new Sanitation;
$SQL = mysql_query ('SELECT foo FROM bar');
while ($Data = mysql_fetch_object ($SQL)) {
echo $sanitation->xss_clean ($Data->content);
}
og ...
- Kode: Merk alt
$validation = new Validation;
$string = 'John Doe%';
if ($validation->is_alnum ($string)) {
// $string contains alpha-numerical characters
} else {
echo $sanitation->alnum($string); // Prints: John Doe
}
}
Jeg er litt sliten for øyeblikket, så denne tråden kommer nok til å bli oppdatert fortløpende.
Jeg ønsker veldig gjerne tilbakemelding!
Sjekk ut hjemmesiden og dokumentasjonen, og last ned klassene og test ut!
Tilbakemeldinger ønskes varmt velkommen i denne tråden.
Jeg har skrevet endel funksjoner for Validation og Sanitation allerede (sjekk linkene), men ønsker gjerne respons på nye funksjoner jeg kan legge til.
Oppdateringer
23.07.2010 00:15 - Har endret litt på kodestrukturen, slik at du kan tilby så mange argument som overhode mulig med sanitize()- og validate()-metodene. Dette ble gjort etter en gjennomgang av ulike funksjoner, og jeg konkluderte med at det er praktisk å tilby mer enn ett tilleggsargument.
- Kode: Merk alt
$input->validate ('method_name', $data, $option1, $option2, $option3 /* .... */);
$input->get ('some_key_from_get')->validate ('method_name', $option1, $option2 /* ... */);
