Ogólnie ostatnio zastanawia mnie temat bezpieczeństwa tekstu wpisywanego przez użytkowników. A mianowicie tego jak działają strony napisane w php gdzie użytkownik dodaje np. posty i czy przy generowaniu ich strona napisana w php może zastosować tekst jako tekst a nie jako html. Mogę też przesyłać to do warstwy front endowej i generować przy js za pomocą innerText zamiast innerHtml, ale czy jest sposób, aby to zrobić w phpie?
Zabezpieczenie przed niebezpiecznymi znacznikami
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Aincrad
- Postów: 8
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Poznań
- Postów: 9216
Nie do końca jestem pewien, czy rozumem o co pytasz, więc zróbmy tak - rzuć okiem na http://php.net/manual/en/function.addslashes.php oraz http://php.net/manual/en/security.database.sql-injection.php i powiedz, czy może chodziło Ci o coś w tym stylu. A jeśli nie, to napisz swoje pytanie jeszcze raz, ale bardziej opisowo ;)
- Rejestracja: dni
- Ostatnio: dni
- Postów: 5269
Szukaj czegoś typu https://stackoverflow.com/questions/1996122/how-to-prevent-xss-with-html-php
- Rejestracja: dni
- Ostatnio: dni
- Postów: 415
Chyba chodzi o to: http://php.net/manual/en/function.htmlentities.php
I nie ma użytkowników - każdy kto podaje dane w jakimkolwiek formularzu to atakujący. Trzeba przepuścić tylko i wyłącznie to co chcemy.
Edit: próbka kodu
public function setText($text) {
if ((strlen(trim($text)) >= 3) && (strlen(trim($text)) <= 60)) {
$this->text = htmlentities(trim($text), ENT_QUOTES, "UTF-8");
return $this;
}
return false;
}
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Grudziądz/Bydgoszcz
- Postów: 5300
@ccwrc troche źle to zrobiłeś. Dziś stosuję się zasade, że do bazy trafiają dane zvalidowane ale bez zmian, ochroną przez sql injenction ma ogarnąć pdo. Ochrona przed xss powinna być stosowana na wyjściu czyli za każdym wyświetleniem tych danych.
- Rejestracja: dni
- Ostatnio: dni
- Postów: 52
function EscapeBadHTML($html){
$html = stripslashes(strip_tags($html));
return $html;
};
- Rejestracja: dni
- Ostatnio: dni
- Lokalizacja: Grudziądz/Bydgoszcz
- Postów: 5300
Escapowanie stringa na wyjściu w laravelu.
/**
* Escape HTML special characters in a string.
*
* @param \Illuminate\Contracts\Support\Htmlable|string $value
* @param bool $doubleEncode
* @return string
*/
function e($value, $doubleEncode = true)
{
if ($value instanceof Htmlable) {
return $value->toHtml();
}
return htmlspecialchars($value, ENT_QUOTES, 'UTF-8', $doubleEncode);
}