moin,
ich versuche gerade einen javascript-spamschutz zu bauen und das externe javascript vor "unerlaubter benutzung" zu schützen. soweit klappt es auch.
- die aufrufende php-datei setzt eine kontroll-variable in die session
- die aufgerufene php-datei gibt den js-code nur aus, wenn die variable gesetzt ist
-- in dem fall wird nach der ausgabe die variable wieder gelöscht
- bei einem direktaufruf gibt es also keinen js-code
- gibt es aber keinen js-code, gibt es auch keinen validen formularversand
das ganze sieht so aus:
die jscheck.php:
bevor jetzt jemand nölt "bäh das geht aber nur mit aktiviertem javascript", dem sei gesagt:
1. ist das so gewollt
2. könnte man im <noscript>- bereich ein captcha einfügen
ziel des ganzen ist es, "einfache" formulare vor missbrauch durch z.B. spambots zu schützen.
nun zum knackpunkt:
der spass ist relativ leicht zu umgehen:
funktioniert sogar (war ja zu erwarten ). damit kann ich nun mit fsockopen() das form senden und den schutz umgehen. toll.
ziel:
die jscheck.php muss geschützt werden. die einzige möglichkeit, die mir dazu einfällt ist ein referer-check. leider unsicher, weil man ihn abschalten kann.
fällt jemandem eine andere serverseitige möglichkeit ein?
danke für die anteilnahme
ich versuche gerade einen javascript-spamschutz zu bauen und das externe javascript vor "unerlaubter benutzung" zu schützen. soweit klappt es auch.
- die aufrufende php-datei setzt eine kontroll-variable in die session
- die aufgerufene php-datei gibt den js-code nur aus, wenn die variable gesetzt ist
-- in dem fall wird nach der ausgabe die variable wieder gelöscht
- bei einem direktaufruf gibt es also keinen js-code
- gibt es aber keinen js-code, gibt es auch keinen validen formularversand
das ganze sieht so aus:
PHP-Code:
<?php
session_start();
$error = TRUE;
if(!empty($_POST))
{
if(isset($_SESSION['secCheck']['var']))
{
$error = TRUE;
if($_SESSION['secCheck']['var'] == $_POST[$_SESSION['secCheck']['key']])
{
$error = FALSE;
unset($_SESSION['secCheck']);
}
else
$error = TRUE;
}
}
if(!$error)
{
echo '<pre>';
print_r($_POST);
print_r($_SESSION);
?>
<b>Ich bin drin!</b>
<?php
}
else
{
$_SESSION['jssec'] = 1;
?>
<form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
<input name="secCheck" type="password"><br>
Sicherheitscode eingeben.<br>
<input type="submit">
<script type="text/javascript"
src="jscheck.php?<?php echo session_name();?>=<?php echo session_id();?>">
</script>
<noscript><p><b>Ohne JavaScript kommse nisch rein!</b></p></noscript>
</form>
<?php
}
?>
PHP-Code:
<?php
session_start();
function randPass($anz=6)
{
// passwort erzeugen
$pass = md5 (uniqid (rand()));
return substr($pass, 0, $anz);
}
if(isset($_SESSION['jssec']))
{
unset($_SESSION['jssec']);
$_SESSION['secCheck'] = array();
$_SESSION['secCheck']['var'] = randPass(10);
$_SESSION['secCheck']['key'] = randPass(5);
echo 'document.write(\\'<input type="hidden" name="'.$_SESSION['secCheck']['key'].'"
value="'.$_SESSION['secCheck']['var'].'">\\');';
}
?>
1. ist das so gewollt
2. könnte man im <noscript>- bereich ein captcha einfügen
ziel des ganzen ist es, "einfache" formulare vor missbrauch durch z.B. spambots zu schützen.
nun zum knackpunkt:
der spass ist relativ leicht zu umgehen:
PHP-Code:
$fp = fopen('http://www.domain.de/jstest.php?PHPSESSID=e05744a0d5057 ... 35', 'r');
echo implode('', file('http://www.domain.de/jscheck.php?PHPSESSID=e05744a0d5057 ... 35'));
ziel:
die jscheck.php muss geschützt werden. die einzige möglichkeit, die mir dazu einfällt ist ein referer-check. leider unsicher, weil man ihn abschalten kann.
fällt jemandem eine andere serverseitige möglichkeit ein?
danke für die anteilnahme
Kommentar