2013-06-19 11 views
6

Ich arbeite derzeit auf einer Website, wo Benutzer Artikel mit wenigen Formatmöglichkeiten (wie fett, kursiv, Liste ...) schreiben können. Ich benutze ein Framework: CodeIgniter.Vermeiden XSS mit BBCode Eingabe und HTML-Ausgabe

Ich bin ein Anfänger, und ich habe einiges über XSS gehört. Ich würde gerne wissen, was Sie über meine Umsetzung denken. Ich habe dieses Thema gelesen: What's the best method for sanitizing user input with PHP?

1) Der Benutzer schreiben seinen Artikel, formatieren Sie es mit BBCode. Ich benutze SCEditor.

2) Wenn ich es in der Datenbank speichere, benutze ich htmlspecialchars(), um verdächtige HTML-Tags zu filtern. Soll ich das tun, wenn ich Daten speichere oder Daten zeige?

3) Wenn ich den Artikel auf der Website anzeigen möchte (für andere Zwecke zum Beispiel), konvertiere ich BBCode-Tags in HTML-Tags.

Ist es ein richtiger Weg? Vermeide ich XSS?

Ich bin offen für Vorschläge und Ratschläge.

Vielen Dank für Ihre Antworten

Antwort

2

Codeigniter zur Validierung hat eine Eigenschaft xss, die alle diejenigen Mitarbeiter

$this->form_validation->set_rules('username', 'Username', 'trim|required|min_length[5]|max_length[12]|xss_clean'); 

Check-out Formularvalidierung Codeigniter tun:

http://ellislab.com/codeigniter/user-guide/libraries/form_validation.html

+4

ich das sah, aber zu diesem Thema nach, ist es nicht genug: http://stackoverflow.com/questions/5337143/codeigniter-why-use-xss-clean –

2

I „finden und ersetzen "mit PHP, ich denke nicht, dass es die effizienteste Art ist, es zu tun.

<?php 
    $malicious = "<script>alert(1)</script>"; 
    $malicious = str_ireplace("<", "", $malicious); 
    $malicious = str_ireplace(">", "", $malicious); 
    echo $malicious; 
?> 
+0

Ich bin mir bewusst, dass diese Frage alt ist, aber es gibt ziemlich viele Ansichten, also dachte ich darüber nach, diese Antwort zu kommentieren. Es ist eigentlich ein schlechter Weg das zu tun, du könntest zum Beispiel XSS immer noch in ein Onload-Attribut oder etwas Ähnliches setzen. – 1n9i9c7om

+0

Neben @ 1n9i9c7om, möchte ich darauf hinweisen, dass mit dieser Methode der Benutzer nicht das '<' or '>' Zeichen einfügen kann, was ziemlich nervig sein kann. Anstatt das Zeichen zu löschen, können Sie es stattdessen durch die entsprechende HTML-Entität ersetzen: '<' oder '>'. –

0
<?php 
$malicious = "<script>alert(1)</script>"; 
$malicious = strip_tags($malicious); 
$malicious = htmlentities($malicious, ENT_QUOTES); 
echo $malicious; 
?>