Wpis z mikrobloga

@jaskowice1: Skasowałeś wpis jak pisałem odpowiedź…

1. ZAWSZE zabezpieczaj w zależności od kontekstu. Jak wchodzę w projekt, to nie chcę się zastanawiać czy akurat zmienna X jest bezpieczna dla SQLa – chcę widzieć escape i być pewnym, że jest.
2. Przed SQLi zabezpieczasz przez mysqli_real_escape_string albo – to drugie MOCNO zalecam – przez bindowanie parametrów (google prepared statements).
3. Przestaw się na PDO do bazkowania.
4. Przed XSS zabezpieczasz przez html_special_chars($napis, ENT_QUOTES | ENT_SUBSTITUTE, 'utf-8').
5. Możesz olać strip_tags() – przed niczym nie zabezpiecza.
6. Możesz olać htmlentities() – koduje wszystko co się da, wręcz nadmiarowo. Wygodniej kodować te kilka znaków, które mają znaczenie, przez html_special_chars()
7. Wracając do punktu pierwszego – NIE koduj encji przed wsadzeniem do bazki – KODUJ TAM GDZIE KONTEKST. Czyli koduj encje htmlowe przy wyświetlaniu w HTMLu.
  • 7
@MacDada: a mam takie pytanie jeszcze, bo rozumiem że przed XSS to głównie się zabezpieczać jak robię echo, a jak np. sobie w ifie sprawdzam coś z $POST? To jakoś to zabezpieczać?

załóżmy coś takiego:

if isset($
POST['id']){
}
@jaskowice1: Musisz zrozumieć na czym polega niebezpieczeństwo, żeby móc się przed nim zabezpieczyć.

HTML to tekst „interpretowany”. Przeglądarki nie wyświetlają HTMLa, tylko analizują go i wykonują różne operacje na jego podstawie.

Np sekwencja **lol** przeglądarki rozumieją jako „wyświetl pogrubiony napis lol”. I tu się rodzi niebezpieczeństwo, że – jeśli pozwolisz użytkownikom wpływać na HTML – to mogą oni zrobić kuku sobie lub innym użytkownikom.

Np zamiast ** mógłby to być kod_js_kradnacy_sesje();
@jaskowice1: Tak BTW, jeszcze odnośnie XSSów. Na górze napisałem Ci jak używać html_special_chars – wszystkie te parametry co podałem muszą być przekazywane. Stąd najlepiej zrób sobie swoją funkcję htmlEscape($napis), która odpali odpowiednio html_special_chars – żebyś nie musiał się powtarzać.

ALE będzie to bezpieczeczne dopiero przy spełnieniu kilku dodatkowych warunków.

Po pierwsze napisy faktycznie muszą być w UTF-8 – więc upewnij się, że pliki PHP masz tak zakodowane, że bazki masz