| |
|
|
Julian Schmidt | Hallo, wurde gestern, trotz kleiner Rechen-Captcha, über mein Gästebuch[...] zugespamt. Habe gerade eine kleine Bad-Word-Liste hinzugefügt. Was sind so die häufigsten Wörter/Kriterien nach den man effektiv Spams herausfiltern kann? Meine Liste sieht gerade so aus.
$punkte += 1 * substr_count(strtolower($inhalt),'<');
$punkte += 1 * substr_count(strtolower($inhalt),'>');
$punkte += 1 * substr_count(strtolower($inhalt),'!');
$punkte += 2 * substr_count(strtolower($inhalt),'</');
$punkte += 2 * substr_count(strtolower($inhalt),'100%');
$punkte += 2 * substr_count(strtolower($inhalt),'viagra');
$punkte += 2 * substr_count(strtolower($inhalt),'porn');
$punkte += 2 * substr_count(strtolower($inhalt),'free');
$punkte += 2 * substr_count(strtolower($inhalt),'poker');
$punkte += 2 * substr_count(strtolower($inhalt),'https://');
$punkte += 3 * substr_count(strtolower($inhalt),'href');
Bitte keine elend langen Wort-Listen posten, sondern nur potenziale Spam-Begriffe, welche ein normaler Nutzer wahrscheinlich eh nie verwenden würde. Über 5 Punkten zeige ich momentan Spamverdacht. Wie kann man sich noch vor Spams schützen?
Gruß.
Julian
[OFFTOPIC]@iF: Neues Header-Design gefällt nicht. [/OFFTOPIC] |
|
|
| |
|
|
|
| Gibt ja viele solcher Listen, Deine finde ich schon gut und kurz und knapp.
Mal ein kleiner 8-Punkte-Plan:
Mache noch ein 1) weiteres Input type text in einem span style display none namens website - Besucher können da nichts eintragen aber ein Bot wird dort meist etwas hinterlegen.
Wenn Du die Rechenaufgabe 2) zeitversetzt erst per JS erzeugst dann hilft das auch sowie 3) statt nur 1 Bild aus 3 kleinen Bildern bestehend.
Prüfe auch den 4) Referer und den 5) Browser sowie das 6) Alter der Session das bei Besuchern, die etwas ins Eingabefeld tippen, selten unter 15 Sekunden liegt.
Ausserdem ein 7) onwmkeydown-Flag per JS setzen wenn was ins Eingabefeld getippt wird und damit ein input type hidden auf 1 oder kuchen oder window. navigator setzen. Bots tippen meist ja nichts.
Noch schwieriger wirds für Bots wenn Du zudem noch die 8) Captchaeingaben erst auf der Folgeseite abverlangst.
[offtopic]Header-Design nuja...[/offtopic] |
|
|
| |
|
|
|
| Noch was...
jage den Gesamttext zur Prüfung hierdurch:
;function __secure_plaintext($s,$also="\%") {
;return trim(ext_str_replace(' ',' ',preg_replace("/[^a-zA-Z0-9öäüÖÄÜß".$also." ]/","",str_replace("'","",str_replace("'","",$s)))))
;}
;function ext_str_replace($s,$ss,$sss) {
;$sss=str_replace($s,$ss,$sss)
;while (strpos(chr(0).$sss,$s)>0) $sss=str_replace($s,$ss,$sss)
;return $sss
;}
Und mache dann ein explode(" ",strtolower($pruefText)) und dann per foreach ein assoziatives Array $worte[$key]=1 befüllen. So hast Du alle Worte per $worte["wort"]=1 und kannst dann wiederum einfach schauen ob $worte["100%"]==1 ist. |
|
|
| |
|
|
|
Julian Schmidt | Ok danke, werde dann mal schauen wie und was ich davon umsetze. Lass das Thema hier erstmal für Rückfragen meinerseits und natürlich für weitere nützliche Tipps offen.
Gruß |
|
|
| |
|
|
|
Julian Schmidt | |
|
| |
|
|
|
| Zu 1) schreibst Du Input type text hidden -
ich schrieb aber "Input type text in einem span style display none" und das ist anders.
zu 2 würde ich sogar 5+ Sekunden nehmen da vorher eh kein Mensch einen Gästebucheintrag formuliert und getippt hat.
>> Referer wird durch den Submit leider nicht gesetzt. Einfach prüfen ob der Referer >> eine Seiter meiner Homepage ist?
Was?! Türlich hast den Referer auch nach Submit - einfach mal $_SERVER print_r'en.
5) Du hast a) $_SERVER mit Browserinfo (useragent) und per js window.navigator - beides sollten zusammenpassen was bei Bots meist nicht der Fall ist.
6) nach Session anlegen und in $_SESSION["sonstwas" time speichern
Zu Explode: Statt $words["wort"]=1 einfach $words["wort"]++ schreiben - schon hast in der foreach im $value die Anzahl. |
|
|
| |
|
|
|
Julian Schmidt | Zu 1) hatte ich bereits. Zu 2) Jetzt auf 2000 gesetzt. Zu 4) klappt jetzt. Zur 5) Wie bekomme ich den Vergleich hin. Ist ja PHP und Javascript in der Bedingung. Wie ist die Syntax? Den Rest schau ich mir dann später an.... |
|
|
| |
|
|
|
| Zu 5): Bei wmkeydown einfach von einem hiddem edit den value auf window.navigator setzen - so überträgst die JS-Info an PHP und kannst mit der Browseragentvariable aus $_Server vergleichen. |
|
|
| |
|
|
|
Julian Schmidt | Gut damit wären dann 1), 2), 4), 5), 6) und 7) abgehakt. 3) und 8) lass ich wie gesagt bleiben.
Nochmal zu Explode und dem assoziatives Array. Diese Methode auf Begriffe zu prüfen ist für mich unbrauchbar weil Begriffen wie z.B. href wo nicht immer ein Leerzeichen folgt oder einzelne Zeichen wie < nicht berücksichtigt werden. Bleib jetzt bei meiner Variante mit substr_count. Kannst kurz erklären was __secure_plaintext() macht?
Willste mal auf Lücken prüfen? [...] Nochmal schnell der Code.
if (isset($_POST['webseite']) and !is_array($_POST['webseite'])) {
$webseite = $_POST['webseite'];
if (($webseite<>$_SERVER['HTTP_USER_AGENT']) and !empty($webseite)) {
$error_spam = "Spamverdacht<br />";
}
}
If ($_SERVER['HTTP_REFERER']!="https://".$_SERVER['SERVER_NAME']."/gaestebuch.php") {
$error_spam = "Spamverdacht";
}
If (isset($_SESSION['rechen_captcha_time'])) {
$diff_time = time()-$_SESSION['rechen_captcha_time'];
If ($diff_time<=3) {
$error_spam = "Spamverdacht";
}
}
|
|
|
| |
|
|
|
| >>Diese Methode auf Begriffe zu prüfen ist für mich unbrauchbar weil Begriffen wie >>z.B. href wo nicht immer ein Leerzeichen folgt oder einzelne Zeichen wie < nicht >>berücksichtigt werden.
Du hast es nicht getestet, in Verbindung mit __secure_plaintext. Aus
<a href="roffel" würde "a href roffel", explode " " ergäbe a;href;roffel - klüppte also.
>>Kannst kurz erklären was __secure_plaintext() macht?
Entfernt alles was nicht a-zA-Z0-9 und $also und $20 und äöüß ist.
Dein showcaptcha(mod) ist so nicht gedacht, es geht nicht darum was verzögert anzuzeigen sonder es überhaupt erst verzögert zu erstellen ( [...] ) . |
|
|
| |
|
|
|
Julian Schmidt | iF (01.05.13)
Dein showcaptcha(mod) ist so nicht gedacht, es geht nicht darum was verzögert anzuzeigen sonder es überhaupt erst verzögert zu erstellen ( [...] ) .
Und wie ruf ich die Funktion create() auf. Kannst nen kurzes Beispiel machen? |
|
|
| |
|
|
|
| Na einfach <div id="someParent"...
create(_parent,_element,_id)
also
;create("someParent","img","myImg") ;document.getElementById("myImg").src="... |
|
|
| |
|
|