2013-06-19 17 views
6

Obecnie pracuję nad stroną internetową, na której użytkownicy mogą pisać artykuły z niewielkimi możliwościami formatowania (jak pogrubienie, kursywa, lista ...). Używam framework: CodeIgniter.Unikaj XSS z wejściem BBCode i wyjściem HTML

Jestem początkujący i słyszałem kilka rzeczy o XSS. Chciałbym wiedzieć, co sądzisz o mojej realizacji. Przeczytałem ten temat: What's the best method for sanitizing user input with PHP?

1) Użytkownik pisze swój artykuł, sformatuj go za pomocą BBCode. Używam SCEditor.

2) Podczas zapisywania w bazie danych używam htmlspecialchars() do filtrowania podejrzanych znaczników HTML. Czy mam to zrobić, gdy zapisuję dane lub wyświetla dane?

3) Kiedy chcę wyświetlić artykuł na stronie internetowej (na przykład do innych zastosowań), konwertuję tagi BBCode na tagi HTML.

Czy to właściwy sposób? Czy unikam XSS?

Jestem oczywiście otwarty na sugestie i porady.

Dzięki za odpowiedzi

Odpowiedz

2

CodeIgniter walidacji ma właściwość XSS, który zrobi wszystko, tych pracowników

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

Wyjazd walidacji formularza CodeIgniter:

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

+4

widziałem, ale w zależności od tego tematu, to nie wystarczy: http://stackoverflow.com/questions/5337143/codeigniter-why-use-xss-clean –

2

ja „Znajdź i zastąp "używając PHP, nie sądzę, że jest to najbardziej efektywny sposób na zrobienie tego.

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

Jestem świadomy że to pytanie jest stare, ale ma sporo widoków, więc pomyślałem o skomentowaniu tej odpowiedzi. W rzeczywistości jest to zły sposób, można na przykład umieścić XSS w atrybucie onload lub coś podobnego. – 1n9i9c7om

+0

Obok @ 1n9i9c7om, chciałbym zaznaczyć, że za pomocą tej metody użytkownik nie może wstawić znaku '<' or '>', który może być dość irytujący. Zamiast usuwać znak, możesz zamiast tego zastąpić go odpowiednią jednostką HTML: '<' lub '>'. –

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