Nettsikkerhet.no ++ Innføring i inn og utdata
Ganske godt dekka alt du trenger å vite om inndata og utdata
Ganske godt dekka alt du trenger å vite om inndata og utdata
<?php
$Action = preg_replace ('/[^a-z0-9]/', '', strtolower ($_GET['action']));
?>
<script>alert('XSS');</script>
<script>alert("e;XSS"e;);</script>
<?php
include("global.inc.php");
$errors=0;
$error="Følgende feil skjedde:<ul>";
pt_register('POST','bok1');
pt_register('POST','antall1');
pt_register('POST','bok2');
pt_register('POST','antall2');
pt_register('POST','navn');
pt_register('POST','adresse');
pt_register('POST','postnummer');
pt_register('POST','poststed');
pt_register('POST','epost');
pt_register('POST','tlf');
pt_register('POST','kommentar');
$kommentar=preg_replace("/(\015\012)|(\015)|(\012)/"," <br />", $kommentar);if($navn=="" || $adresse=="" || $postnummer=="" || $poststed=="" || $epost=="" || $tlf=="" ){
$errors=1;
$error.="<li>Du fyllte ikke ut et påkrevet felt eller et påkrevet felt inneholder ugyldige tegn. Du kan kun bruke tall og bokstaver. Klikk tilbake og prøv en gang til.";
}
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$epost)){
$error.="<li>Ukorrekt epostadresse ble skrevet inn";
$errors=1;
}
if($errors==1) echo $error;
else{
$where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF),"/"));
$message="Bestilling fra nettbutikken\n
boka: ".$bok1."
Antall boka: ".$antall1."
satt: ".$bok2."
Antall satt: ".$antall2."
Navn: ".$navn."
Adresse: ".$adresse."
Postnummer: ".$postnummer."
Poststed: ".$poststed."
Epost: ".$epost."
tlf: ".$tlf."
Kommentar: ".$kommentar."
";
$message = stripslashes($message);
mail("tonny@tonny12.no","Bestilling av materiale fra carspecial", utf8_decode($message),"From: Carspecial shop");
?>
<?php
/* Sikkerhetshull:
*
* $PHP_SELF // om servern ikke er konfigurert til å fjeren overflod her, så er den åpen for XSS
* E-post meldinger kan ikke vær mer enn 70chars, kan skape problemer.
* <br />
*
* E-post kan være litt vrient, da folk benytter forskjellige e-post lesere...
* Spesielt de nettbaserte, enkelte av dem kan tolker html tegn som HTML(selv om det er plain text e-post), med dem så går det fint å sende outputescape med htmlentitis( > < etc).
* Men i dem som leser det som plain text, vil jo da få opp > isteden for > ....
* Derfor ville jeg ha validert inndataen, med whitelisting: kun enkelte tegn er lovlig.
*
* Globals er i hovedsak et sikkerhethull i seg selv. *
*/
include("global.inc.php");
$errors=0;
$error="Følgende feil skjedde:<ul>";
// opprettelse av de globale variablene til $_POST
// litt i tvil om dette er smart eller ikke...
pt_register('POST','bok1');
pt_register('POST','antall1');
pt_register('POST','bok2');
pt_register('POST','antall2');
pt_register('POST','navn');
pt_register('POST','adresse');
pt_register('POST','postnummer');
pt_register('POST','poststed');
pt_register('POST','epost');
pt_register('POST','tlf');
pt_register('POST','kommentar');
// i denne blir linjeskift og newline byttet til <br />
// form for vasking av inndata
// men blir feil om du ikke sender HTML e-post, linje skift skal være \n(\012)
$kommentar=preg_replace("/(\015\012)|(\015)|(\012)/"," <br />", $kommentar);
// her blir alt sjekket så det ikke er empty fields
if($navn=="" || $adresse=="" || $postnummer=="" || $poststed=="" || $epost=="" || $tlf=="" ){
$errors=1;
$error.="<li>Du fyllte ikke ut et påkrevet felt eller et påkrevet felt inneholder ugyldige tegn. Du kan kun bruke tall og bokstaver. Klikk tilbake og prøv en gang til.";
}
// validere e-post, Eregi: This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$epost)){
$error.="<li>Ukorrekt epostadresse ble skrevet inn";
$errors=1;
}
if($errors==1){
echo $error;
}else{
$where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF) ,"/"));
$message="Bestilling fra nettbutikken\n
boka: ".$bok1."
Antall boka: ".$antall1."
satt: ".$bok2."
Antall satt: ".$antall2."
Navn: ".$navn."
Adresse: ".$adresse."
Postnummer: ".$postnummer."
Poststed: ".$poststed."
Epost: ".$epost."
tlf: ".$tlf."
Kommentar: ".$kommentar."
";
// fjerner slasher fra meldingen
// form for output escaping
$message = stripslashes($message);
mail("tonny@tonny12.no","Bestilling av materiale fra carspecial", utf8_decode($message),"From: Carspecial shop");
?>
<?php
//uskadeligjør php_self
if (!empty ($_SERVER['PATH_INFO']) && strpos ($_SERVER['PHP_SELF'], $_SERVER['PATH_INFO']) !== false) {
$_SERVER['PHP_SELF'] = substr ($_SERVER['PHP_SELF'], 0, -(strlen ($_SERVER['PATH_INFO'])));
}
include("global.inc.php");
$errors=0;
$error="Følgende feil skjedde:<ul>";
// opprettelse av de globale variablene til $_POST
// litt i tvil om dette er smart eller ikke...
pt_register('POST','bok1');
pt_register('POST','antall1');
pt_register('POST','bok2');
pt_register('POST','antall2');
pt_register('POST','navn');
pt_register('POST','adresse');
pt_register('POST','postnummer');
pt_register('POST','poststed');
pt_register('POST','epost');
pt_register('POST','tlf');
pt_register('POST','kommentar');
// i denne blir linjeskift og newline byttet til \n(\012)
// form for vasking av inndata
$kommentar=preg_replace("/(\015\012)|(\015)|(\012)/","\n", $kommentar);
// her blir alt sjekket så det ikke er empty fields
// denne og genVal sjekken burde deles opp så brukeren får vita spesifikt hav som er galt.
if($navn=="" || $adresse=="" || $postnummer=="" || $poststed=="" || $epost=="" || $tlf=="" ){
$errors=1;
$error.="<li>Du fyllte ikke ut et påkrevet felt eller et påkrevet felt inneholder ugyldige tegn. Du kan kun bruke tall og bokstaver. Klikk tilbake og prøv en gang til.";
// se genVal($str) neders
if(!genVal($navn) || !genVal($adresse) || !genVal($postnummer) || !genVal($poststed) || !genVal($tlf) || !genVal($kommentar))
{
$errors=1;
$error.="<li>Enkelte av feltene du har fylt inn inneholder ugyldige tegn";
}
}
// validere e-post, Eregi: This function has been DEPRECATED as of PHP 5.3.0 and REMOVED as of PHP 6.0.0. Relying on this feature is highly discouraged.
if(!eregi("^[a-z0-9]+([_\\.-][a-z0-9]+)*" ."@"."([a-z0-9]+([\.-][a-z0-9]+)*)+"."\\.[a-z]{2,}"."$",$epost)){
$error.="<li>Ukorrekt epostadresse ble skrevet inn";
$errors=1;
}
if($errors==1){
echo $error;
}else{
$where_form_is="http".($HTTP_SERVER_VARS["HTTPS"]=="on"?"s":"")."://".$SERVER_NAME.strrev(strstr(strrev($PHP_SELF) ,"/"));
$message="Bestilling fra nettbutikken\n
boka: ".$bok1."
Antall boka: ".$antall1."
satt: ".$bok2."
Antall satt: ".$antall2."
Navn: ".$navn."
Adresse: ".$adresse."
Postnummer: ".$postnummer."
Poststed: ".$poststed."
Epost: ".$epost."
tlf: ".$tlf."
Kommentar: ".$kommentar."
";
$message = wordwrap($message, 70); //maks 70chars per linje
mail("tonny@tonny12.no","Bestilling av materiale fra carspecial", utf8_decode($message),"From: Carspecial shop");
function genVal($str=NULL)
{
//forenklet validerings funksjon
if(empty($str))
{
return false;
}
// vanlig quote er ikke med her
$TryggeChars = addslashes('.!?.\'*|$[]<>%#^/:;').'\\w\\pL \\(\\)\\&-';
if(preg_match('^['.$TryggeChars.']\\z/um', $str)) // /u = UTF-8 encodedcheck - krever at dokumentet er UTF-8 /m er multiline, så den ikke stopepr på linjeskift(\n)
{
// om ikke noe matcher noe annet enn hva som er lov
return $str;
}
return false;
}
?>
Hvorfor trenger man egentlig å vaske inndata som settes inn i en database? Kan man ikke bare gjøre det på utdata? Da tenker jeg på html koder.
Hvorfor trenger man egentlig å vaske inndata som settes inn i en database? Kan man ikke bare gjøre det på utdata?
Det virker det bortsett fra at når et påkrevet felt ikke blir fyllt å så kommer beskjeden på neste side:
Fatal error: Call to undefined function genval() in /home/ladfgo/public_html/sdfgia.no/nettbutikk/process.php on line 50
function genVal($str=NULL)
{
//forenklet validerings funksjon
if(empty($str))
{
return false;
}
// vanlig quote er ikke med her
$TryggeChars = addslashes('.!?.\'*|$[]<>%#^/:;').'\\w\\pL \\(\\)\\&-';
if(preg_match('^['.$TryggeChars.']\\z/um', $str)) // /u = UTF-8 encodedcheck - krever at dokumentet er UTF-8 /m er multiline, så den ikke stopepr på linjeskift(\n)
{
// om ikke noe matcher noe annet enn hva som er lov
return $str;
}
<?php
function genVal($str=NULL)
{
//forenklet validerings funksjon
if(empty($str))
{
return false;
}
// vanlig quote er ikke med her
$TryggeChars = addslashes('.!?.\'*|$[]<>%#^/:;').'\\w\\pL \\(\\)\\&-';
if(preg_match('^['.$TryggeChars.']\\z/um', $str))
// /u = UTF-8 encodedcheck - krever at dokumentet er UTF-8 /m er multiline, så den ikke stopper på linjeskift(\n)
{
// om ikke noe matcher noe annet enn hva som er lov
return $str;
}
return false;
}
?>
return false;
}