Brute force beveiliging $_POST
Maar ik kom er niet uit hoe ik de waardes van de inputs weer terug krijg.
De afzonderlijke $_POST worden daarna gecontroleerd.
Ik gebruik overigens geen normale database.
Iemand die me een zetje kan geven in de goede richting?
Ik heb nu oa:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
function beveilig($sInput) {
$sOutput = '';
if(!get_magic_quotes_gpc() == 0) {
$sOutput = $sInput;
} else {
if(function_exists('mysql_real_escape_string')) {
$sOutput = mysql_real_escape_string($sInput);
} else {
$sOutput = addslashes($sInput);
}
}
$sOutput = htmlentities($sOutput, ENT_QUOTES);
return $sOutput;
}
function beveilig_array($aInput) {
if(!is_array($aInput)) {
return false;
}
$aOutput = array();
foreach($aInput as $iKey => $sValue) {
if(is_array($sValue)) {
$aOutput[beveilig($iKey)] = beveilig_array($sValue);
} else {
$aOutput[beveilig($iKey)] = beveilig($sValue);
}
}
return $aOutput;
}
$_POST = beveilig_array($_POST);
$sOutput = '';
if(!get_magic_quotes_gpc() == 0) {
$sOutput = $sInput;
} else {
if(function_exists('mysql_real_escape_string')) {
$sOutput = mysql_real_escape_string($sInput);
} else {
$sOutput = addslashes($sInput);
}
}
$sOutput = htmlentities($sOutput, ENT_QUOTES);
return $sOutput;
}
function beveilig_array($aInput) {
if(!is_array($aInput)) {
return false;
}
$aOutput = array();
foreach($aInput as $iKey => $sValue) {
if(is_array($sValue)) {
$aOutput[beveilig($iKey)] = beveilig_array($sValue);
} else {
$aOutput[beveilig($iKey)] = beveilig($sValue);
}
}
return $aOutput;
}
$_POST = beveilig_array($_POST);
htmlentities of htmlspecialchars gebruik je *bij weergave*, anders niet. Escaping gebruik je *in je query*, of waar je elders escaping nodig hebt. Hier gebruik je de escaping functie voor dat specifieke doel, anders niet.
Gewijzigd op 09/08/2017 14:29:06 door Ben van Velzen
Wat heeft dit met brute force beveiliging te maken?
Bedankt voor je reactie.
De afzonderlijke ingangen worden ook gecontroleerd.
Maar wil graag een specifieke brute-force beveiliging.
Is het dan (zonder traditionele database) voldoende om te werken met
$regexp, preg_match, enz?
Toevoeging op 09/08/2017 14:47:10:
Kwam van deze site Ozzie.
Maar als er andere oplossingen zijn dan hoor ik het graag...
http://www.sitemasters.be/tutorials/1/1/557/PHP/Beveiliging_in_scripts
Oké, maar dat heeft dus niks met brute force te maken. Dat staat ook niet zo op die site.
Escaping pas je toe waar je het nodig hebt, zoals ik al heb aangegeven. Als je geen data onschadelijk hoeft te maken ga je ook niet escapen. Daarom zijn magic quotes ook uit PHP gehaald, ze leverden alleen problemen op.
Voor brute force beveiliging beter kijken naar aantal inlogpogingen gedurende bepaalde periode?
Maar dan vraag ik me af of je wel weet wat dit inhoudt, en wat brute-force inhoudt.
Ben alleen niet zo bekend met Brute force.
En omdat er nogal wat ingevoerd kan worden door leden, wil ik me ook daar wat in verdiepen.
Maar uit de scripts die ik daarover gevonden heb gaat het dan vooral op beperking van het aantal
inlogpogingen gedurende bepaalde tijd. En verder de controle op gegevens.
Dan is het eenvoudig rekenen of deze binnen een bepaalde tijd valt, en zo ja: BLOKKADE.
Ik zal het eens uitwerken.
Werkt bij mij beetje anders, omdat ik niet met gewone database werk.
Maar snap de gedachte erachter.
Overigens nog geen opmerking hoe je de gegevens bij het gegeven script terug kunt lezen.
Misschien voor deze toepassing niet zo ideaal.
Maar wellicht voor andere zaken...
Welk script bedoel je eigenlijk?
Van de start topic..
- mysql_real_escape_string is al verouderd
- addslashes doet het juist verkeerd
- en een controle op get_magic_quotes_gpc is niet meer nodig, omdat deze (kansloze) functie er al sinds PHP 5.4 uit is gesloopt.
Gebruik gewoon netjes: mysqli_real_escape_string() in je queries, waar je aanpasbare variabelen in verwerkt.
Denk aan $_GET, $_POST, $_COOKIE en $_ENV.
Of verdiep je in Prepared Statements in MySQLi of PDO. Dan hoef je het zelf niet meer te escapen, en doet de classe het zelf.
Bedankt voor de reacties.
Kan weer even verder.
- Ariën - op 09/08/2017 16:42:35:
Of verdiep je in Prepared Statements in MySQLi of PDO. Dan hoef je het zelf niet meer te escapen, en doet de classe het zelf.
Tenzij je dit principe verkeerd toepast (rechtstreeks concateneren van $_GET en $_POST in SQL), wat nogal eens gebeurt.
Het moment dat je stopt met nadenken over de veiligheid van code is meestal het moment dat je code vatbaar wordt voor misbruik. Simpelweg omdat je gebruik maakt van prepared statements maakt je code niet ineens per definitie immuun voor SQL-injectie of wat dan ook...
Brute force ga je tegen door:
- CSRF-tokens
- stop het hele ding achter een login?
Daarnaast helpt het ook om orde te scheppen in je code door het scheiden van de stappen van formuliergebruik: het weergeven, posten, en een eventuele bedankpagina na afloop - stop deze alle in code die apart behandeld wordt (hetzij methoden, hetzij aparte PHP-bestanden). Maak gebruik van de POST/redirect/GET aanpak.
PS: over sitemasters: lees ook ff alle reacties. Daar kun je doorgaans ongeveer bepalen hoe oud (en dus meestal ook hoe relevant) een tutorial (nog) is en of de voorgestelde methodiek ook echt hout snijdt (wat hier absoluut niet het geval is).
Gewijzigd op 09/08/2017 17:20:22 door Thomas van den Heuvel