2013-06-19 16 views
6

Attualmente sto lavorando a un sito Web, in cui gli utenti possono scrivere articoli con poche possibilità di formato (come grassetto, corsivo, elenco ...). Sto usando un framework: CodeIgniter.Evita XSS con ingresso BBCode e output HTML

Sono un principiante e ho sentito alcune cose su XSS. Mi piacerebbe sapere cosa ne pensi della mia implementazione. Ho letto questo argomento: What's the best method for sanitizing user input with PHP?

1) L'utente scrive il suo articolo, formattandolo con BBCode. Sto usando SCEditor.

2) Quando lo si salva nel database, sto usando htmlspecialchars() per filtrare qualsiasi tag HTML sospetto. Dovrei farlo quando sto salvando dati o visualizzando dati?

3) Quando voglio visualizzare l'articolo sul sito Web (per altri usi, ad esempio), converto i tag di BBCode in tag HTML.

È un modo giusto per farlo? Sto evitando XSS?

Sono ovviamente aperto a suggerimenti e consigli.

Grazie per le vostre risposte

risposta

2

Codeigniter per la convalida ha un XSS proprietà che farà tutti coloro personale

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

check-out modulo convalida Codeigniter:

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

+4

ho visto che, ma secondo questo argomento, non è sufficiente: http://stackoverflow.com/questions/5337143/codeigniter-why-use-xss-clean –

2

I "trovare e sostituire "usando PHP, non penso che sia il modo più efficiente di farlo comunque.

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

Sono consapevole che questa domanda è vecchia, ma ottiene parecchie visualizzazioni, quindi ho pensato di commentare questa risposta. In realtà è un pessimo modo di farlo, potresti ancora inserire XSS in un attributo onload o qualcosa di simile. – 1n9i9c7om

+0

Accanto a @ 1n9i9c7om, vorrei sottolineare che con questo metodo l'utente non può inserire il segno '<' or '>' che può essere piuttosto fastidioso. Invece di eliminare il carattere, è possibile sostituirlo con l'entità HTML corrispondente: "<" o ">". –

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