PHP handleiding

PHP TUIS PHP Inleiding PHP installeer PHP sintaksis PHP opmerkings PHP veranderlikes PHP Echo / Druk PHP datatipes PHP Strings PHP-nommers PHP Wiskunde PHP konstante PHP-operateurs PHP As...Anders...Elseif PHP skakelaar PHP-lusse PHP funksies PHP-skikkings PHP Superglobals PHP RegEx

PHP- vorms

PHP-vormhantering PHP-vorm validering PHP-vorm word vereis PHP-vorm URL/e-pos PHP-vorm voltooi

PHP Gevorderd

PHP datum en tyd PHP sluit in PHP-lêerhantering PHP-lêer oop/lees PHP-lêer skep/skryf PHP-lêer oplaai PHP-koekies PHP-sessies PHP filters PHP-filters Gevorderd PHP-terugbelfunksies PHP JSON PHP-uitsonderings

PHP OOP

PHP Wat is OOP PHP Klasse/Objekte PHP Konstrukteur PHP vernietiger PHP Toegangswysigers PHP erfenis PHP konstante PHP Abstrakte Klasse PHP-koppelvlakke PHP eienskappe PHP statiese metodes PHP Statiese Eienskappe PHP naamruimtes PHP Iterables

MySQL- databasis

MySQL-databasis MySQL Connect MySQL Skep DB MySQL Skep tabel MySQL Voeg data in MySQL Kry Laaste ID MySQL Voeg veelvuldige in MySQL voorberei MySQL Kies Data MySQL Waar MySQL Bestel deur MySQL verwyder data MySQL-opdateringsdata MySQL-limietdata

PHP XML

PHP XML-ontleders PHP SimpleXML-ontleder PHP SimpleXML - Kry PHP XML Expat PHP XML DOM

PHP - AJAX

AJAX Intro AJAX PHP AJAX-databasis AJAX XML AJAX Live Search AJAX-peiling

PHP voorbeelde

PHP voorbeelde PHP samesteller PHP vasvra PHP Oefeninge PHP-sertifikaat

PHP- verwysing

PHP Oorsig PHP Skikking PHP-kalender PHP datum PHP gids PHP fout PHP-uitsondering PHP lêerstelsel PHP filter PHP FTP PHP JSON PHP sleutelwoorde PHP Libxml PHP-pos PHP Wiskunde PHP Diverse PHP MySQLi PHP-netwerk PHP-uitsetbeheer PHP RegEx PHP SimpleXML PHP-stroom PHP-string PHP veranderlike hantering PHP XML-ontleder PHP zip PHP Tydsones

PHP- vorm validering


Hierdie en die volgende hoofstukke wys hoe om PHP te gebruik om vormdata te valideer.


PHP-vorm validering

Dink SEKURITEIT wanneer jy PHP-vorms verwerk!

Hierdie bladsye sal wys hoe om PHP-vorms te verwerk met sekuriteit in gedagte. Behoorlike bekragtiging van vormdata is belangrik om u vorm teen kuberkrakers en strooiposverslinders te beskerm!

Die HTML-vorm waaraan ons in hierdie hoofstukke gaan werk, bevat verskeie invoervelde: vereiste en opsionele teksvelde, radioknoppies en 'n indien-knoppie:

Die valideringsreëls vir die vorm hierbo is soos volg:

Field Validation Rules
Name Required. + Must only contain letters and whitespace
E-mail Required. + Must contain a valid email address (with @ and .)
Website Optional. If present, it must contain a valid URL
Comment Optional. Multi-line input field (textarea)
Gender Required. Must select one

Eerstens sal ons kyk na die gewone HTML-kode vir die vorm:



Teksvelde

Die naam-, e-pos- en webwerfvelde is teksinvoerelemente, en die kommentaarveld is 'n teksarea. Die HTML-kode lyk soos volg:

Name: <input type="text" name="name">
E-mail: <input type="text" name="email">
Website: <input type="text" name="website">
Comment: <textarea name="comment" rows="5" cols="40"></textarea>

Radio knoppies

Die geslagsvelde is radioknoppies en die HTML-kode lyk soos volg:

Gender:
<input type="radio" name="gender" value="female">Female
<input type="radio" name="gender" value="male">Male
<input type="radio" name="gender" value="other">Other

Die vormelement

Die HTML-kode van die vorm lyk soos volg:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Wanneer die vorm ingedien word, word die vormdata met method="post" gestuur.

Wat is die $_SERVER["PHP_SELF"] veranderlike?

Die $_SERVER["PHP_SELF"] is 'n super globale veranderlike wat die lêernaam van die skrip wat tans uitvoer, terugstuur.

Dus, die $_SERVER["PHP_SELF"] stuur die ingediende vormdata na die bladsy self, in plaas daarvan om na 'n ander bladsy te spring. Op hierdie manier sal die gebruiker foutboodskappe op dieselfde bladsy as die vorm kry.

Wat is die htmlspecialchars() funksie?

Die htmlspecialchars()-funksie skakel spesiale karakters om na HTML-entiteite. Dit beteken dat dit HTML-karakters soos < en > sal vervang met < en >. Dit verhoed dat aanvallers die kode ontgin deur HTML- of Javascript-kode (Cross-site Scripting-aanvalle) in vorms in te spuit.


Groot nota oor PHP-vormsekuriteit

Die $_SERVER["PHP_SELF"] veranderlike kan deur kuberkrakers gebruik word!

As PHP_SELF in jou bladsy gebruik word, kan 'n gebruiker 'n skuinsstreep (/) invoer en dan 'n paar Cross Site Scripting (XSS) opdragte om uit te voer.

Cross-site scripting (XSS) is 'n tipe rekenaarsekuriteitskwesbaarheid wat tipies in webtoepassings voorkom. XSS stel aanvallers in staat om kliënt-kant skrip in te spuit in webblaaie wat deur ander gebruikers bekyk word.

Gestel ons het die volgende vorm in 'n bladsy met die naam "test_form.php":

<form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">

Nou, as 'n gebruiker die normale URL in die adresbalk invoer soos "http://www.example.com/test_form.php", sal die bogenoemde kode vertaal word na:

<form method="post" action="test_form.php">

So ver so goed.

Neem egter in ag dat 'n gebruiker die volgende URL in die adresbalk invoer:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

In hierdie geval sal die bogenoemde kode vertaal word na:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>

Hierdie kode voeg 'n skripmerker en 'n waarskuwingsbevel by. En wanneer die bladsy laai, sal die JavaScript-kode uitgevoer word (die gebruiker sal 'n waarskuwingskassie sien). Dit is net 'n eenvoudige en onskadelike voorbeeld hoe die PHP_SELF veranderlike uitgebuit kan word.

Wees bewus daarvan dat enige JavaScript-kode binne die <script>-merker bygevoeg kan word! 'n Hacker kan die gebruiker na 'n lêer op 'n ander bediener herlei, en daardie lêer kan kwaadwillige kode bevat wat die globale veranderlikes kan verander of die vorm na 'n ander adres kan indien om die gebruikerdata te stoor, byvoorbeeld.


Hoe om $_SERVER["PHP_SELF"]-uitbuitings te vermy?

$_SERVER["PHP_SELF"]-uitbuitings kan vermy word deur die htmlspecialchars()-funksie te gebruik.

Die vormkode moet soos volg lyk:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

Die htmlspecialchars()-funksie skakel spesiale karakters om na HTML-entiteite. As die gebruiker nou probeer om die PHP_SELF-veranderlike te ontgin, sal dit die volgende uitvoer tot gevolg hê:

<form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">

Die uitbuitingspoging misluk, en geen skade word gedoen nie!


Valideer vormdata met PHP

Die eerste ding wat ons sal doen, is om alle veranderlikes deur PHP se htmlspecialchars() funksie deur te gee.

Wanneer ons die htmlspecialchars() funksie gebruik; dan as 'n gebruiker probeer om die volgende in 'n teksveld in te dien:

<script>location.href('http://www.hacked.com')</script>

- dit sal nie uitgevoer word nie, want dit sou gestoor word as HTML-ontsnapte kode, soos volg:

<script>location.href('http://www.hacked.com')</script>

Die kode is nou veilig om op 'n bladsy of binne 'n e-pos vertoon te word.

Ons sal ook nog twee dinge doen wanneer die gebruiker die vorm indien:

  1. Stroop onnodige karakters (ekstra spasie, oortjie, nuwe reël) van die gebruikerinvoerdata (met die PHP trim()-funksie)
  2. Verwyder backslashes (\) van die gebruikerinvoerdata (met die PHP stripslashes() funksie)

Die volgende stap is om 'n funksie te skep wat al die kontrole vir ons sal doen (wat baie geriefliker is as om dieselfde kode oor en oor te skryf).

Ons sal die funksie test_input() noem.

Nou kan ons elke $_POST veranderlike nagaan met die test_input() funksie, en die script lyk soos volg:

Voorbeeld

<?php
// define variables and set to empty values
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST") {
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}

function test_input($data) {
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>

Let daarop dat ons aan die begin van die skrif kontroleer of die vorm ingedien is deur $_SERVER["REQUEST_METHOD"] te gebruik. As die REQUEST_METHOD POST is, dan is die vorm ingedien - en dit behoort bekragtig te word. As dit nie ingedien is nie, slaan die validering oor en vertoon 'n leë vorm.

In die voorbeeld hierbo is alle invoervelde egter opsioneel. Die skrip werk goed, selfs al voer die gebruiker geen data in nie.

Die volgende stap is om invoervelde vereis te maak en foutboodskappe te skep indien nodig.