PHP-controle op het bestaan ​​van variabelen. Vraag: Hoe controleer ik of een variabele bestaat?

Ik wil controleren of een variabele bestaat. Nu doe ik zoiets als dit:

Probeer: myVar behalve NameError: # Doe iets.

Zijn er andere manieren zonder uitzonderingen?


2018-05-09 13:10

Antwoorden:

Controleren op de aanwezigheid van een lokale variabele:

Als "myVar" in locals(): # myVar bestaat.

Controleren op de aanwezigheid van een globale variabele:

Als "myVar" in globals(): # myVar bestaat.

Controleren of een object een attribuut heeft:

If hasattr(obj, "attr_name"): # obj.attr_name bestaat.


2018-05-09 13:16

Het gebruik van variabelen die niet zijn gedefinieerd of ingesteld (impliciet of expliciet) is bijna altijd slecht Elk Dit geeft aan dat er niet goed over de programmalogica is nagedacht en dat dit waarschijnlijk tot onvoorspelbaar gedrag zal leiden.

De volgende truc, die vergelijkbaar is met die van jou, zorgt ervoor dat de variabele dat wel heeft sommige waarde vóór gebruik:

Probeer: myVar behalve NameError: myVar = Geen # Nu bent u vrij om myVar te gebruiken zonder dat Python klaagt.

Ik denk echter nog steeds niet dat dit een goed idee is. Naar mijn mening zou je je code moeten herstructureren om te voorkomen dat deze situatie zich voordoet.


2018-05-09 13:19

Het gebruik van try/except is de beste manier om het bestaan ​​van een variabele te controleren. Maar er is vrijwel zeker een betere manier om te doen wat u doet dan het instellen/testen van globale variabelen.

Als u bijvoorbeeld een variabele op moduleniveau wilt initialiseren wanneer een functie voor de eerste keer wordt aangeroepen, bent u beter af met code als deze:

Mijn_variabele = Geen def InitMyVariable(): globaal mijn_variabele als mijn_variabele Geen is: mijn_variabele = ...


2018-05-09 13:27

voor objecten/modules kan dat ook

"var" in dir(obj)

Bijvoorbeeld,

>>> class Something(object): ... pass ... >>> c = Something() >>> c.a = 1 >>> "a" in dir(c) True >>> "b" in dir (c) Onwaar


2017-10-28 18:39

Een gemakkelijke manier is om het eerst te initialiseren met myVar = Geen

Dan later:

Als myVar niet Geen is: # Doe iets


2018-06-04 18:46

Ik vermoed dat de test zal worden gebruikt in een functie die vergelijkbaar is met het antwoord van user97370. Ik vind dit antwoord niet leuk omdat het de globale naamruimte vervuilt. Een manier om dit op te lossen is door in plaats daarvan een klasse te gebruiken:

Klasse InitMyVariable(object): my_variable = Geen def __call__(self): als self.my_variable Geen is: self.my_variable = ...

Ik vind dit niet leuk omdat het de code ingewikkelder maakt en vragen oproept zoals: of dit het Singleton-programmeerpatroon valideert? Gelukkig staat Python al een tijdje toe dat functies attributen hebben, waardoor we deze eenvoudige oplossing hebben:

Def InitMyVariable(): als InitMyVariable.my_variable Geen is: InitMyVariable.my_variable = ... InitMyVariable.my_variable = Geen


2018-03-25 20:31

2018-05-09 13:12

Een manier die vaak goed werkt om dit soort situaties aan te pakken, is om niet expliciet te controleren of de variabele bestaat, maar gewoon door te gaan en het eerste gebruik van de mogelijk niet-bestaande variabele te verpakken in een try/except NameError.

nulfunctie (11)

Ik heb (of heb niet) een $_GET["myvar"] variabele die uit mijn queryreeks komt en ik wil controleren of die variabele bestaat en ook of de waarde overeenkomt met iets in mijn if-instructie:

Wat ik doe en waarvan ik denk dat het niet de beste manier is om te doen:

if(isset($_GET["mijnvar"]) && $_GET["mijnvar"] == "iets") : iets doen

Dit is een eenvoudig geval, maar stel je voor dat je veel van deze $myvar-variabelen moet vergelijken.

Antwoorden

Dit is vergelijkbaar met het geaccepteerde antwoord, maar gebruikt in plaats daarvan in_array. In deze situatie geef ik er de voorkeur aan om empty() te gebruiken. Ik stel ook voor om de nieuwe string array-declaratie te gebruiken die beschikbaar is in PHP 5.4.0+.

$toegestaan ​​= ["iets", "niets"]; if(!empty($_GET["mijnvar"]) && in_array($_GET["mijnvar"],$allowed))(..)

Hier is een functie om meerdere waarden tegelijk te controleren.

$arrKeys = array_keys($_GET); $toegestaan ​​= ["iets", "niets"]; function checkGet($arrKeys,$allowed) ( foreach($arrKeys as $key) ( if(in_array($_GET[$key],$allowed)) ( $values[$key]; ) ) return $values; )

Ik gebruik al mijn eigen nuttige functies exst(), die automatisch variabelen declareert.

$element1 = exst($arr["sleutel1"]); $val2 = exst($_POST["sleutel2"], "geenwaarde"); /** * Functie exst() - Controleert of de variabele is ingesteld * (kopieer/plak deze op een willekeurige plek in uw code) * * Als de variabele is ingesteld en niet leeg is, wordt de variabele geretourneerd (geen transformatie) * Als de variabele is niet ingesteld of leeg, retourneert de waarde $default * * @param mixed $var * @param mixed $default * * @return mixed */ function exst(& $var, $default = "") ($t = "" ; (!isset($var) || !$var) ( if (isset($default) && $default != "") $t = $default; ) else ( $t = $var; ) if (is_string ($t)) $t = trim($t); retourneert $t;

Welnu, je kunt volstaan ​​met if($_GET["myvar"] == "something"), aangezien die voorwaarde ervan uitgaat dat de variabele ook bestaat. Als dit niet het geval is, resulteert de expressie ook in false .

Ik denk dat het oké is om dit in voorwaardelijke termen te doen, zoals hierboven. Geen kwaad eigenlijk.

Mijn vraag is: is er een manier om dit te doen zonder de variabele tweemaal te declareren?

Nee, er is geen manier om dit correct te doen zonder twee controles uit te voeren. Ik haat het ook.

Eén manier om dit te omzeilen is door alle relevante GET-variabelen op één centraal punt te importeren in een array of object van een bepaald type (de meeste MVC's doen dit automatisch) en alle eigenschappen in te stellen die later nodig zijn. (In plaats van toegang te krijgen tot queryvariabelen via code.)

If (isset($_GET["mijnvar"]) == "iets")

Dankzij Mellowsoon en Pekka heb ik hier wat onderzoek gedaan en kwam ik op dit resultaat:

  • Controleer en declareer elke variabele als nul (indien dit het geval is) voordat u deze gebruikt (zoals aanbevolen):
!isset($_GET["mijnvar"]) ? $_GET["mijnvar"] = 0:0;

*ok, dit is eenvoudig maar werkt prima, je kunt de variabele na deze regel overal gaan gebruiken

  • Een array gebruiken voor alle gevallen:
$mijnvars = array("var1", "var2", "var3"); foreach($mijnvars als $key) !isset($_GET[$key]) ? $_GET[$sleutel] =0:0;

* hierna kunt u uw variabelen gebruiken (var1, var2, var3... etc.)

PS: een functie die een JSON-object ontvangt zou beter moeten zijn (of een eenvoudige door burst/explosie gescheiden tekenreeks);

Betere benaderingen zijn welkom :)

UPDATE:

Gebruik $_REQUEST in plaats van $_GET, op deze manier dekt u de variabelen $_GET en $_POST.

Isset($_REQUEST[$sleutel]) ? $_REQUEST[$sleutel] =0:0;

De oplossing die ik uit het spel heb gevonden, is om het volgende te doen:

If($x=&$_GET["mijnvar"] == "iets") ( // doe dingen met $x )

Als tip zou je deze aanpak kunnen overwegen:

Vereist = array("myvar" => "defaultValue1", "foo" => "waarde2", "bar" => "waarde3", "baz" => "waarde4"); $missing = array_diff($required, array_keys($_GET)); foreach($missing as $key => $default) ( $_GET[$key] = $default ; )

Je stelt de standaardwaarden in en stelt de niet ontvangen parameters in op de standaardwaarde :)

Helaas is dit de enige manier om het te doen. Maar er zijn manieren om met grote arrays te werken. Bijvoorbeeld zoiets als dit:

$required = array("mijnvar", "foo", "bar", "baz"); $missing = array_diff($required, array_keys($_GET));

De variabele $missing bevat nu een lijst met waarden die vereist zijn, maar ontbreken in de array $_GET. U kunt $missing array gebruiken om een ​​bericht aan de bezoeker weer te geven.

Of je kunt zoiets als dit gebruiken:

$required = array("mijnvar", "foo", "bar", "baz"); $missing = array_diff($required, array_keys($_GET)); foreach($missing as $m) ( $_GET[$m] = null; )

Nu heeft elk vereist element standaard een standaardwaarde. Nu kunt u if ($_GET["myvar"] == "something") gebruiken zonder dat u zich zorgen hoeft te maken dat de sleutel niet is ingesteld.

Update

Een andere manier om de code op te schonen is door een functie te gebruiken die controleert of de waarde is ingesteld.

Functie getValue($key) ( if (!isset($_GET[$key])) ( return false; ) return $_GET[$key]; ) if (getValue("myvar") == "iets") ( / /Doe iets)

waarom maak je hier niet een functie voor, converteer de variabele die je wilt controleren naar een echte variabele, b.v.

Functie _FX($name) ( if (isset($$name)) retourneert $$name; else retourneert null; )

dan doe je _FX("param") == "123" , gewoon een gedachte

Ik heb (veel) betere code gevonden om dit te doen als je iets wilt testen in .

Als [[ $1 = "" ]] echo "$1 is leeg" anders echo "$1 is gevuld" fi

Waarom dit allemaal? Alles bestaat in Bash, maar is standaard leeg, dus test -z en test -n kunnen je niet helpen.

Als [ $(#1) = 0 ] echo "$1 is leeg" anders echo "$1 is gevuld" fi

U kunt controleren of een bepaalde variabele bestaat (dat wil zeggen: deze is geïnitialiseerd of niet). Gebruik hiervoor de functie:

Isset(variabele);

Als de variabele momenteel niet bestaat (er is nog nooit eerder een waarde aan toegekend of deze is door de functie verwijderd uitgeschakeld () ), en vervolgens de functie isset () retourneert vals , anders - WAAR :

$x = 5;

als (isset($x))

echo ‘< BR > Variabele $ X bestaat, ‘, “de waarde ervan is $ X < BR >”;

Het volgende verschijnt op het scherm:

Variabele $ X bestaat, is de waarde 5

Het is belangrijk om te onthouden dat we geen niet-geïnitialiseerde variabele in het programma kunnen gebruiken - dit zal een waarschuwing van de tolk genereren PHP .

Om erachter te komen of een waarde een variabele is leeg , wordt de functie gebruikt:

leeg( variabel);

Als de waarde van de variabele is nul ,“0”, NUL , lege regel (“” ), false, de variabele is niet gedeclareerd of is dat wel lege array , dan retourneert deze functie WAAR , anders - vals .

Om te controleren type variabel, er worden functies gebruikt:

Is_string(variabele);

is _ int (variabel);

is _ vlot (variabel);

is _ nul (variabel);

is _ reeks (variabel);

is _ numeriek (variabel); - als de variabele numeriek is ( geheel getal , vlot ) of een string die alleen cijfers bevat.

Deze functies keren terug WAAR als de variabele van het opgegeven type is.

Gegevensuitvoer

Niet-geformatteerde uitvoer

Formaatloos De uitvoer van strings of variabele waarden wordt uitgevoerd door de functie:

echo lijst met variabelen;

echo lijn;

Waar lijst met variabelen – namen van uitvoervariabelen gescheiden door komma's.

Als we met een webbrowser werken, stuurt deze functie de uitvoer naar de clientzijde van de browser (naar het venster ervan).

Zoals al gezegd: als namen van variabelen worden gevonden in een string tussen dubbele aanhalingstekens, worden de overeenkomstige waarden op het scherm weergegeven in plaats van deze namen. Bovendien, als zo'n regel tags bevat HTML (handvatten tussen punthaken), dan geeft de browser dit weer HTML -code zoals het zou moeten doen bij interpretatie HTML -document:

$jaar = 2012;

$bericht = “ Wens iedereen geluk !”;

echo “

Mijn Gefeliciteerd !

”;

echo “ Aangekomen $ jaar jaar !
$ bericht
”;

?>

De niveautitel wordt op het scherm weergegeven H 3 en een daaropvolgende begroeting, met het woord “ geluk!" wordt vet en cursief weergegeven:

Gefeliciteerd!

Het is 2012! Ik wens iedereen geluk!

Op deze manier kunt u dynamische sites maken.

Geformatteerde uitvoer

Geformatteerd Met output kunt u de uitvoernummers in verschillende getalsystemen en in het decimale systeem weergeven - in verschillende vormen ( formaten ). Het is vergelijkbaar met de geformatteerde uitvoer in Si en wordt uitgevoerd door de functies:

afdrukkenf (“formaat”, uitvoerlijst);

sprintf (“formaat”, uitvoerlijst);

De eerste functie geeft geformatteerde gegevens weer in het browservenster en retourneert de hoeveelheid ervan.

De tweede functie formatteert alleen de uitvoergegevens, maar voert deze niet uit.

Formaat is een reeks transformatiedescriptoren voor de uitvoerwaarden.

Transformatiebeschrijving voor elke waarde heeft de vorm:

% Tijdelijke aanduidingAlignmentLength.AccuracyType

- Totaal is het symbool dat zal worden gebruikt om het transformatieresultaat naar de opgegeven waarde te voltooien lengte (standaard - ruimte ); als het een ander teken is, wordt het voorafgegaan door een enkel aanhalingsteken ( apostrof ),

- Uitlijning – standaard – door rechts rand van het uitvoerveld; als er een min is ( - ), dan door links ,

- Lengte – uitvoerveldbreedte - het aantal toegewezen spaties voor het uitvoeren van deze waarde. Als de uitvoerwaarde minder tekens bevat dan de opgegeven waarde lengte , dan wordt de resterende ruimte gevuld ruimtes of opvultekens,

- Nauwkeurigheid – het aantal decimalen in het fractionele deel van het getal,

- Type – type uitgangswaarde:

B binair ,

Met symbool ,

D geheel in het decimale getalsysteem,

e echt in exponentiële vorm (zwevende komma),

F echt in vaste puntvorm,

S lijn ,

O geheel in het octale getalsysteem,

X geheel in het hexadecimale getalsysteem.

Voorbeeld:

php

$ zarp _1 = 6543.21;

$ zarp _2 = 45321.67;

$ fam _1 = "Balaganov";

$ fam _2 = "Buig";

afdrukkenf ("< H 1>Loonlijst H 1>");

printf("%.-12s%".10.2f rub.", $fam_1, $zarp_1);

echo "
";

printf("%.-12s%".10.2f rub.", $fam_2, $zarp_2);

echo "
";

?>

Het punt ( ‘. ). Achternamen worden links uitgelijnd ( - ) in een veldbreedte 12 karakters. Getallen worden weergegeven in de vorm van een vast punt in een veldbreedte 10 karakters en met precisie 2 decimalen, rechts uitgelijnd.

Het materiaal is vooral bedoeld voor beginnende webprogrammeurs.

Invoering.

Vaak word ik benaderd door klanten die zelfgeschreven CMS hebben geïnstalleerd of modules geschreven door beginnende webprogrammeurs die niet begrijpen wat er nodig is om data te beschermen en vaak filterfuncties kopiëren zonder na te denken over hoe ze werken en wat er precies mee moet gebeuren .

Hier zal ik proberen de veelvoorkomende fouten bij het filteren van gegevens in een PHP-script zo gedetailleerd mogelijk te beschrijven en eenvoudige tips geven over hoe u gegevens correct kunt filteren.

Er zijn veel artikelen op internet over het filteren van gegevens, maar deze zijn niet compleet en zonder gedetailleerde voorbeelden.

Nabespreking.

Filtratie. Fout #1
Voor numerieke variabelen wordt de volgende controle gebruikt:
$nummer = $_GET["invoer_nummer"]; if (intval($number)) ( ... voer de SQL-query uit... )
Waarom zal dit leiden tot SQL-injectie? Het punt is dat de gebruiker de variabele kan specificeren invoer_nummer betekenis:
1"+UNIE+SELECTIE
In dergelijke gevallen wordt de controle met succes voltooid, omdat de intval-functie krijgt de gehele waarde van een variabele, d.w.z. 1, maar in de variabele zelf $ nummer Er is niets veranderd, dus alle kwaadaardige code wordt doorgegeven aan de SQL-query.
Correct filteren:
$nummer = intval($_GET["invoernummer"]); if ($number) ( ... SQL-query uitvoeren... )
Uiteraard kan de voorwaarde veranderen, bijvoorbeeld als u slechts een bepaald bereik nodig heeft:
if ($getal >= 32 EN $getal<= 65)

Als u selectievakjes of meervoudige selecties met numerieke waarden gebruikt, voert u de volgende controle uit:
$checkbox_arr = array_map("intval", $_POST["checkbox"]);
array_map
Ik zie ook filteren in het formulier:
$nummer = htmlspecialchars(intval($_GET["invoernummer"]));
htmlspeciale tekens
Of:
$nummer = mysql_escape_string(intval($_GET["invoernummer"]));
mysql_escape_string

Dit kan alleen maar een glimlach opleveren :)

Filtratie. Fout #2.
Voor tekenreeksvariabelen wordt de volgende filtering gebruikt:
$input_text = voegtlashes toe($_GET["input_text"]);
De functie 'addlashes' ontsnapt aan het bijzondere. tekens, maar er wordt geen rekening gehouden met de databasecodering en filtering kan worden omzeild. Ik zal de tekst van de auteur die deze kwetsbaarheid heeft beschreven niet kopiëren en alleen een link naar Chris Shiflett geven (de vertaling kun je zoeken in RuNet).

Gebruik de functie mysql_escape_string of mysql_real_escape_string, bijvoorbeeld:
$input_text = mysql_escape_string($_GET["input_text"]);
Als u niet verwacht dat er html-tags worden opgenomen, kunt u het beste de volgende filtering uitvoeren:
$input_text = strip_tags($_GET["input_text"]); $input_text = htmlspecialchars($input_text); $input_text = mysql_escape_string($input_text);
strip_tags - verwijdert html-tags.
htmlspecialchars - converteert specials. tekens in HTML-entiteiten.
Zo bescherm je jezelf, naast SQL-injectie, ook tegen XSS-aanvallen.
Als je html-tags nodig hebt, maar alleen om de broncode weer te geven, gebruik dan gewoon:
$input_text = htmlspecialchars($_GET["input_text"]); $input_text = mysql_escape_string($input_text);

Als het voor u belangrijk is dat de waarde van de variabele niet leeg is, gebruik dan de trimfunctie, bijvoorbeeld:
$input_text = trim($_GET["input_text"]); $input_text = htmlspecialchars($input_text); $input_text = mysql_escape_string($input_text);

Filtratie. Fout #3.
Het betreft het zoeken in de database.
Om op cijfers te zoeken, gebruikt u de filtering beschreven in de eerste fout.
Om op tekst te zoeken, gebruikt u de filtering beschreven in de tweede fout, maar onder voorbehoud.
Om ervoor te zorgen dat de gebruiker geen logische fout kan uitvoeren, is het noodzakelijk om de special te verwijderen of te screenen. SQL-tekens.
Voorbeeld zonder extra stringverwerking:
$input_text = htmlspecialchars($_GET["input_text"]); // Zoeken: "%" $input_text = mysql_escape_string($input_text);
De uitvoer zal een query zijn zoals:
... WAAR tekst_row ALS "%".$input_text."%" ... // WAAR tekst_row ALS "%%%"
Dit zal de belasting van de basis aanzienlijk verhogen.
In mijn script gebruik ik een functie die tekens verwijdert die ik niet uit de zoekopdracht wil:
function strip_data($text) ( $quotes = array ("\x27", "\x22", "\x60", "\t", "\n", "\r", "*", "%", "<", ">", "?", "!"); $goodquotes = array ("-", "+", "#"); $repquotes = array ("\-", "\+", "\#"); $text = trim(strip_tags($text)); $text = str_replace($quotes, "", $text); , " ", $tekst); retourneert $tekst)
Natuurlijk zijn niet alle hierboven genoemde karakters gevaarlijk, maar in mijn geval zijn ze niet nodig, dus voer ik een zoek- en vervangactie uit.
Voorbeeld van het gebruik van filtering:
$input_text = strip_data($_GET["input_text"]); $input_text = htmlspecialchars($input_text); $input_text = mysql_escape_string($input_text);
Ook raad ik je aan om het aantal karakters in de zoekopdracht te beperken, minimaal 3, omdat... als u een groot aantal records in de database heeft, zal het zoeken naar 1-2 tekens de belasting van de database aanzienlijk vergroten.
Filtratie. Fout #4.
De waarden in de variabele worden niet gefilterd $_COOKIE. Sommige mensen denken dat, aangezien deze variabele niet door het formulier kan worden doorgegeven, dit een garantie voor veiligheid is.
Deze variabele is in elke browser heel gemakkelijk te vervalsen door sitecookies te bewerken.
In een bekend CMS was er bijvoorbeeld een controle van het gebruikte sitesjabloon:
if (@is_dir (MAIN_DIR . "/template/" . $_COOKIE["skin"]))( $config["skin"] = $_COOKIE["skin"]; ) $tpl->dir = MAIN_DIR . "/sjabloon/" . $config["huid"];
In dit geval kunt u de waarde van de variabele vervangen $_COOKIE["skin"] en een fout veroorzaken waarbij u het absolute pad naar de sitemap ziet.
Als u de cookiewaarde gebruikt om op te slaan in de database, gebruik dan een van de hierboven beschreven filters, dit geldt ook voor de variabele $_SERVER.
Filtratie. Fout #5.
Richtlijn inbegrepen register_globals. Zorg ervoor dat u het uitschakelt als het is ingeschakeld.
In sommige situaties kunt u de waarde doorgeven van een variabele die niet had mogen worden doorgegeven. Als de site bijvoorbeeld groepen heeft, moet voor groep 2 de variabele $group leeg zijn of gelijk zijn aan 0, maar het is voldoende om te faken. het formulier door de code toe te voegen:

In een PHP-scriptvariabele $groep zal gelijk zijn aan 5 als het niet in het script met een standaardwaarde is gedeclareerd.
Filtratie. Fout #6.
Controleer uw gedownloade bestanden.
Controleer de volgende punten:
  1. Bestandsextensie. Het is raadzaam om het downloaden van bestanden met extensies: php, php3, php4, php5, enz. te verbieden.
  2. Is het bestand geüpload naar de server move_uploaded_file
  3. Bestandsgrootte
Inspectie. Fout #1.
Ik kwam gevallen tegen waarin bij een AJAX-verzoek (bijvoorbeeld: reputatie vergroten) de naam of ID van de gebruiker werd doorgegeven (aan wie de reputatie toenam), maar in PHP zelf was er geen controle op het bestaan ​​van zo'n gebruiker.
Bijvoorbeeld:
$user_id = intval($_REQUEST["user_id"]); ... INSERT INTO REPLOG SET uid = "($user_id)", plus = "1" ... ... UPDATE Gebruikers SET reputatie = reputatie+1 WHERE user_id = "($user_id)" ...
Het blijkt dat we een vermelding in de database aanmaken die voor ons volkomen nutteloos is.
Inspectie. Fout #2.
Wanneer u verschillende soorten acties uitvoert (toevoegen, bewerken, verwijderen) met gegevens, vergeet dan niet de rechten van de gebruiker te controleren op toegang tot deze functie en extra functies (met behulp van html-tags of de mogelijkheid om materiaal te publiceren zonder verificatie).

Lang geleden heb ik een soortgelijke fout gecorrigeerd in een forummodule, toen elke gebruiker een bericht aan de administratie kon bewerken.

Inspectie. Fout #3.
Wanneer u meerdere php-bestanden gebruikt, voert u een eenvoudige controle uit.
In bestand index.php(of in een ander hoofdbestand) schrijft u de volgende regel voordat u andere php-bestanden aansluit:
definieer("LEESBESTAND", waar);
Schrijf aan het begin van andere php-bestanden:
if (! gedefinieerd ("READFILE")) ( exit ("Fout, verkeerde manier om te archiveren.
Ga naar hoofd."); }
Hierdoor wordt de toegang tot bestanden beperkt.
Inspectie. Fout #4.
Gebruik hashes voor gebruikers. Dit helpt voorkomen dat deze of gene functie via XSS wordt aangeroepen.
Een voorbeeld van het samenstellen van een hash voor gebruikers:
$secret_key = md5(strtolower("http://site.ru/" . $member["naam"] . sha1($wachtwoord) . date("Ymd"))); // $secret_key is onze hash
Vervang vervolgens in alle belangrijke vormen de invoer door de waarde van de huidige hash van de gebruiker:

Controleer tijdens het uitvoeren van het script:
if ($_POST["geheime_sleutel"] !== $geheime_sleutel) ( exit ("Fout: geheime_sleutel!"); )
Inspectie. Fout #5.
Stel bij het uitvoeren van SQL-fouten een eenvoudige beperking in op de toegang tot informatie. Stel bijvoorbeeld het wachtwoord voor de GET-variabele in:
if ($_GET["passsql"] == "wachtwoord") ( ... SQL-foutuitvoer... ) else ( ... Alleen informatie over de fout, geen details... )
Hiermee kunt u informatie voor de hacker verbergen die hem kan helpen de site te hacken.
Inspectie. Fout #5.
Probeer geen bestanden op te nemen door bestandsnamen van buitenaf op te halen.
Bijvoorbeeld:
if (isset($_GET["bestandsnaam"])) ( inclusief $_GET["bestandsnaam"] .php"; )
Gebruik de schakelaar