Frage

Die Grundlagen:

  • Ich habe ein Kontaktformular, das verwendet PHP zu validieren die Formen. (Zusätzlich zu dem Client-Seite) Dies obwohl in jeder Server-Seite Sprache getan werden könnte.
  • Die Server-Seite nur erlaubt     A-Z 0-9 für bestimmte Felder (es ist     akzeptabler dieses Feld zu validieren, zu     nur Englisch mit diesem äußerst begrenzten Bereich)
  • Wenn das Formular Fehler enthält, besiedeln ich die Felder, damit der Benutzer nicht wieder neu eingeben muss vor dem Absenden
  • Ich bin bereit, nicht auf andere Websites zu lassen, um meine Form zu veröffentlichen, auch wenn legitime Verwendung dort gefunden werden.

Ich kann leicht ein Formular auf einer andere Website machen, dass die Stellen ein Schimpfwort auf ein Feld. Bestimmte schmutzige Worte sind perfekt legit nach den Validierungsregeln, aber mein employeer wäre natürlich nicht so, dass dies geschieht.

Ich habe den Eindruck, dass dedizierter Hacker Cookies, php-Sessions und natürlich versteckte Felder sind leicht zu fälschen zusammen mit Referrer und so beeinflussen kann. Wie kann ich zu veröffentlichen meine Seite Websites Dritter blockieren?

Bitte zögern Sie nicht mich Google für diese auch zu helfen. Meine Suchbegriffe sind schwach und Erziehung Methoden, die ich weiß, wird fehlschlagen.

Was passiert, wenn jemand trägt „d03boy isst Katzen“ über ein Formular auf ihrer Website und bekommt Menschen einen Link zu klicken, um es zu meinem Formular abschickt? (Gib es möglich ist, und meine Firma kann das Risiko nicht akzeptieren) dann, wenn ein Benutzer auf den Link klickt sie im Inneren des „name“ -Feld finden Sie unter „d03boy Katzen isst“ und bekommt Super beleidigt und Kontakte PETA über unsere Website-Content. Wir können nicht einfach für den Benutzer erklären, was passiert ist. Es stimme, es ist nichts passiert, aber ein einzelnen Benutzer zu stören ist nicht akzeptabel, meinen Arbeitgeber.

Unsere aktuelle Lösung ist keine Benutzereingabe zu berichten, was meiner Meinung nach ein großes Usability Problem ist.

War es hilfreich?

Lösung

Das klingt wie Sie eine Mäßigung System für nutzergenerierte Inhalte benötigen, keine technische Lösung. Natürlich können Sie das Referrer-Feld, den Inhalt Gestrüpp überprüfen und versuchen, die profanen zu filtern, sondern Aufzählen Schlechtigkeit nie funktioniert. (Es kann ein akzeptabler „ersten Durchgang“, sondern Menschen sind unendlich einfallsreich bei der Vermeidung solcher Filter).

Setzen Sie den Benutzer bereitgestellte Inhalte in eine Warteschlange und haben Moderatoren Überprüfung und Inhalt genehmigen. Um die Last zu erleichtern, können Sie vertrauenswürdige Benutzer auf „pre genehmigt“, aber Sie haben gesagt, Ihr Kunde kann kein Risiko übernehmen.

Ehrlich gesagt, finde ich das unmöglich: auch mit den Moderatoren die Gefahr besteht, dass ein Moderator Ihr System untergraben wird. Wenn das wirklich wahr ist (dass sie Null Risikotoleranz haben), dann schlage ich sie alle Benutzereingaben nicht akzeptieren, nicht Vertrauen Moderatoren und in der Tat zu beseitigen, die Website selbst (weil ein Insider Schelm gehen könnte und legt etwas unsachgemäß nach oben). Offensichtlich jede Handlung hat Risiko; Sie müssen herausfinden, wie viel sie können, wie zum Beispiel einer Moderator basierte Genehmigung Warteschlange akzeptieren.

Andere Tipps

Ich bin mir nicht sicher, ob ich Ihre Frage ganz verstehen, aber ich werde mein Bestes tun, Sie eine einfache Antwort zu geben.

Cross-Site-Scripting (XSS) geschieht in der Regel, wenn jemand anderes in HTML-Code in Ihre Formen setzt. Ihre Website ermöglicht dies geschehen kann, weil es nicht die HTML richtig zu entkommen. Wenn Sie PHP verwenden möchten Sie wahrscheinlich die Verwendung der htmlentities ($ str, ENT_QUOTES) Funktion machen.

htmlentities($str, ENT_QUOTES)

PHP htmlentities

Mein Versuch

...
<?
$form_token = "";
$token = "";
$encoded_token = "";
$salt = "ThiséèÞ....$ÖyiìeéèÞ";  //it is 70 characters long
...
...
$blnGoodToken = false;
...
...
//Check for the encoded token
session_start();
$encoded_token = GetSuper('POST', 'TOKEN');
if (isset($_SESSION['TOKEN'])) {
    if (sha1($_SESSION['TOKEN'] + $salt) === $encoded_token) {
        $blnGoodToken = true;
        //echo "Good Token";
        }
    else {
        //echo "Bad Token";
        $blnGoodToken = false;
        unset($_SESSION);
        session_unset();
        session_destroy();
        session_start();
        }
    }
else {
    $blnDoit = false;
    echo "No Token, possible no session";
    }

$token = uniqid(rand(), TRUE);
$_SESSION['TOKEN'] = $token;
$form_token = sha1($token + $salt);
...
...
?>
...
...
<form action="request.php?doit=y" method="post">
    <input type="text" name="TOKEN" id="TOKEN" value="<?=$form_token?>" />
    <!--
    form stuff
    -->
    <input type="reset"  value="Clear" />
    <input type="submit" value="Submit" />
</form>

Da ich Sitzungen nicht überall verwenden sonst auf der Website, ich glaube nicht, dass wir viel zu Session-Hijacking ausgesetzt sind. Das Token ändert sich bei jeder Last und das Token zu erhalten, die Sitzung entsprechen würden Sie wissen müssen,

  1. Ich bin mit SHA. Eine einfache Vermutung macht auf meinem PHP-Code
  2. Ich halte es in der Sitzung. Ich nehme an die Sitzung gettable
  3. Mein Salz. Ich denke, das ist eine gute Geheimnis. Wenn sie wissen, mein Salz sie bereits Besitz meines Server
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top