Cryptographic Nonce
Hoi allemaal,
Ik ben bezig met het ontwikkelen van een nieuwe website en ik ben me goed aan het oriƫnteren op het gebied van de beveiligingen die ik moet gaan toepassen. Nu heb ik de laatste tijd veel met WordPress gedaan en die werken met een nonce veld.
Even in een samenvatting: er wordt een verborgen veld in een formulier gestopt welke een unieke waarde heeft. Wanneer het formulier verstuurd wordt kijkt het systeem eerst of de nonce waarde wel binnen een bepaalde marge valt en of er dan verder dingen uitgevoerd morgen worden.
http://en.wikipedia.org/wiki/Cryptographic_nonce
http://codex.wordpress.org/Wordpress_Nonce_Implementation
Hoe kan ik dit het beste aanpakken? Zijn er voorbeelden van een algoritme dat ik hier voor kan gebruiken? Vinden jullie het nodig of is het schijnveiligheid?
Ik hoor graag wat jullie er van vinden.
Crispijn
Ik ben bezig met het ontwikkelen van een nieuwe website en ik ben me goed aan het oriƫnteren op het gebied van de beveiligingen die ik moet gaan toepassen. Nu heb ik de laatste tijd veel met WordPress gedaan en die werken met een nonce veld.
Even in een samenvatting: er wordt een verborgen veld in een formulier gestopt welke een unieke waarde heeft. Wanneer het formulier verstuurd wordt kijkt het systeem eerst of de nonce waarde wel binnen een bepaalde marge valt en of er dan verder dingen uitgevoerd morgen worden.
http://en.wikipedia.org/wiki/Cryptographic_nonce
http://codex.wordpress.org/Wordpress_Nonce_Implementation
Hoe kan ik dit het beste aanpakken? Zijn er voorbeelden van een algoritme dat ik hier voor kan gebruiken? Vinden jullie het nodig of is het schijnveiligheid?
Ik hoor graag wat jullie er van vinden.
Crispijn
Gesponsorde koppelingen:
Dit wordt meestal CSRF genoemd.
http://en.wikipedia.org/wiki/Cross-site_request_forgery
Wat het doet, is kijken of de geleverde data wel uit het oorspronkelijke formulier komen en dus niet met een directe request, wat spambots doen.
Een mogelijkheid is op de forumulier-pagina een willekeurige string genereren en deze zowel in de sessie op te slaan, als als een verborgen veld in het formulier te stoppen. Bij de afhandeling kan je dan controleren of deze twee data hetzelfde is. Zo ja, is het een legetiem request, zo niet is het waarschijnlijk een spambot.
Voorbeeld:
form.php
handler.php
EDIT: Het is niet helemaal hetzelfde, csrf en nonce, maar het dient wel hetzelfde doel en lijkt mij eenvoudiger.
http://en.wikipedia.org/wiki/Cross-site_request_forgery
Wat het doet, is kijken of de geleverde data wel uit het oorspronkelijke formulier komen en dus niet met een directe request, wat spambots doen.
Een mogelijkheid is op de forumulier-pagina een willekeurige string genereren en deze zowel in de sessie op te slaan, als als een verborgen veld in het formulier te stoppen. Bij de afhandeling kan je dan controleren of deze twee data hetzelfde is. Zo ja, is het een legetiem request, zo niet is het waarschijnlijk een spambot.
Voorbeeld:
form.php
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<html>
<body>
<?php
session_start();
$randomString = uniqid(rand(), true);
$_SESSION['csrf'] = $randomString;
?>
<form action="handler.php" method="post">
<input type="text" name="email" />
<textbox name="reply"></textbox>
<input type="hidden" name="csrf" value="<?php echo $randomString; ?>" />
<input type="submit" />
</form>
</body>
</html>
<body>
<?php
session_start();
$randomString = uniqid(rand(), true);
$_SESSION['csrf'] = $randomString;
?>
<form action="handler.php" method="post">
<input type="text" name="email" />
<textbox name="reply"></textbox>
<input type="hidden" name="csrf" value="<?php echo $randomString; ?>" />
<input type="submit" />
</form>
</body>
</html>
handler.php
Code (php)
1
2
3
4
5
6
7
8
9
2
3
4
5
6
7
8
9
<?php
session_start();
if($_SERVER['REQUEST_METHOD'] == 'post') {
if($_POST['csrf'] != $_SESSION['csrf']) {
die('Spambot detected');
}
// Handle request normally
}
?>
session_start();
if($_SERVER['REQUEST_METHOD'] == 'post') {
if($_POST['csrf'] != $_SESSION['csrf']) {
die('Spambot detected');
}
// Handle request normally
}
?>
EDIT: Het is niet helemaal hetzelfde, csrf en nonce, maar het dient wel hetzelfde doel en lijkt mij eenvoudiger.
Gewijzigd op 01/01/1970 01:00:00 door Pim -
Hey Pim, dit ziet er inderdaad eenvoudiger uit. Geen lastige vergelijkingen en algeritmes, dit is net zo doeltreffend als je je sessie netjes weet te managen.
Weet iemand in hoe verre je dit soort houtje touwtje oplossingen moet toepassen als je gebruik maakt van Zend? Ik zit er over te denken om me hier in te verdiepen voor mijn nieuwe project voordat ik ergens aan begin waar ik later toch niet tevreden over ben.
Ik hoor graag van jullie!
Crispijn
Weet iemand in hoe verre je dit soort houtje touwtje oplossingen moet toepassen als je gebruik maakt van Zend? Ik zit er over te denken om me hier in te verdiepen voor mijn nieuwe project voordat ik ergens aan begin waar ik later toch niet tevreden over ben.
Ik hoor graag van jullie!
Crispijn



