Czy w trzeba sanityzować checkboxy?

0

Czy w trzeba sanityzować checkboxy? Czytam książkę o php i tam jest taki kod:

<?php
 if (isset($_POST['submit']))
   {
   echo "Lubisz następujące języki programowania:<br />";
   foreach($_POST['languages'] AS $language) {
 $language = htmlentities($language);
 echo "$language<br />";
   }
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
 Jakie są Twoje ulubione języki programowania?<br /> (zaznacz wszystkie pasujące):<br />
 <input type="checkbox" name="languages[]" value="csharp" />C#<br />
   <input type="checkbox" name="languages[]" value="javascript" />JavaScript<br />
   <input type="checkbox" name="languages[]" value="perl" />Perl<br />
   <input type="checkbox" name="languages[]" value="php" />PHP<br />
   <input type="submit" name="submit" value="Wyślij!" />
</form>

Zadaje sobie pytanie po co tam htmlentities?

0

bo mozna zrobic XSS'a podmieniajac value w konsoli

0

stivens: czyli wszędzie trzeba dawać html entities?

0

Nie no. Jak masz jakiegos boola (true/falsa) to nie

0

@stivens:
czyli takiego checkboxa nie trzeba

<input type="checkbox" name="checkbox">
if(!isset($_POST['checkbox'])){```

ale takiego buttona już tak?
```php  
<input type="button" name="button" value="xss" >
if(!isset($_POST['checkbox'])){```

czyli wszędzie tam gdzie jest parametr value?
0

ale value buttona nie jest przesylane w formularzu?

0

@stivens tak, oba są, ale to tylko poglądowo napisane

0

W kazdym razie nie ufasz danym nadeslanym w formularzu bo do wykonania zapytania nie jest potrzebna nawet przegladarka a tresc zapytania moze byc dowolna. Jesli to co przyjdzie od uzytkownika jest potem wyswietlane to mamy podatnosc XSS

0

Jesli to co przyjdzie od uzytkownika jest potem wyswietlane to mamy podatnosc XSS
stivens: To zdanie zapamiętam do końca życia. Dzięki!

2

Ogólnie wszystkim danym z zewnątrz (nawet z bazy danych) nie powinieneś ufać. Nie ważne czy będziesz je wyświetlał czy nie. Uważaj też, żeby funkcji htmlenties nie nadużywać. Ja miałem ostatio kłopot, ponieważ pewien sprytny programista na wejściu wszystkie $_POST, $_GET etc. przepuścił przez htmlentites. Póżniej w skrypcie tworzył randomowe hasło. Gorzej było, kiedy w tym haśle był np. znak &. W bazie zostało zapisane hasło z tym znakiem, ale przy próbie logowania (po wysłaniu formularza przez POST) & zostało zamieniane na &&amp;, więc hasła nie mogły się zgadzać.

Wydaje mi się, że zamiast przerabiać dane, lepiej sprawdzać czy pasują do określonego patternu...

Fakt tworzenia hasła dla użytkownika przemilczmy ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1