Deutsch
PHP, HTML & JavaScript- Forum

Spams verhindern

 

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]
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
29.04.2013  
 



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]
 
30.04.2013  
 



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.
 
30.04.2013  
 




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ß
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
30.04.2013  
 




Julian
Schmidt
Ok, bin jetzt mal die Liste sturr durchgegangen.

1) Input type text hidden

2) Rechenaufgabe zeitversetzt per JS
Frage spielt das Delay ein Rolle oder reicht es wenn ich eine 1ms nehme?
function showcaptcha() {

    document.getElementById('sicherheitscode').style.display="inline";

}

setTimeout("showcaptcha()",100);

3) Rechenaufgabe in mehrer Bilder splitten.
Lass ich erstmal weg, evtl. später noch

4) Referer
Referer wird durch den Submit leider nicht gesetzt. Einfach prüfen ob der Referer eine Seiter meiner Homepage ist?

5) Browser
Inwiefern ist der Browser ein Kriterium für Bots oder User?
Wie kann man Unterscheiden?
6) Alter der Session
Wie ermittle ich das Alter eines Session, einfach per Timestamp oder geht das leichter? Evtl. ne Variation mit dem Verfallsdatum?

7) onwmkeydown-Flag per JS

iF (30.04.13)
und damit ein input type hidden auf 1 oder kuchen oder window. navigator setzen


kuchen? window-navigator? meinste cookies?
Schreib gerade einfach in das Hiddenfeld von 1)
function key_down() {

    document.gaestebuch.webseite.value = "julian-schmidt.xprofan.com";

}

<textarea onkeydown="key_down()" ...

Und
if (isset($_POST['webseite']) and !is_array($_POST['webseite'])) {

     $webseite = $_POST['webseite'];

    if (($webseite<>"julian-schmidt.xprofan.com") and !empty($webseite))  {

         $error_site = "Spamverdacht<br />";

    }

}


8) Captcha über Weiterleitung
Lass ich weg. Gefällt mir von der Form nicht.

iF (30.04.13)
Und mache dann ein explode(" ",strtolower($pruefText)) und dann per foreach ein
assoziatives Array $worte=1 befüllen. So hast Du alle Worte per $worte=1
und kannst dann wiederum einfach schauen ob $worte==1 ist.


Gibt das nicht Probleme mit mehreren gleichen Wörter? Soll ja mitberücksichtigt werden?
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
30.04.2013  
 



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.
 
30.04.2013  
 




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....
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
01.05.2013  
 



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.
 
01.05.2013  
 




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.
<script type="text/javascript">

function showcaptcha(mod) {

    if (mod==true) {

        document.getElementById('sicherheitscode').style.display="inline";

    } else if(mod==false) {

        document.getElementById('sicherheitscode').style.display="none";

    }

}

setTimeout("showcaptcha(false)",0);
setTimeout("showcaptcha(true)",2000);

function key_down() {

    document.gaestebuch.webseite.value = window.navigator.userAgent;

}

</script>

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";

    }

}

 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
01.05.2013  
 



>>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 (  [...]  ) .
 
01.05.2013  
 




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?
 
XProfan X2
Win7 Professional, SP1, AMD FX(tm)-8350 Eight-Core Processor

˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗˗
Webseite [...] 
01.05.2013  
 



Na einfach <div id="someParent"...

create(_parent,_element,_id)

also

;create("someParent","img","myImg")
;document.getElementById("myImg").src="...
 
01.05.2013  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

91.113 Betrachtungen

Unbenanntvor 0 min.
Member 872212122.06.2019
E.T.11.02.2018
ByteAttack11.10.2017
GDL24.11.2016
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie