HTMLPurifier слага \ пред кавичките

s_gerrard

Registered
Здравейте! В системата която правя използвам CKEditor за писане на статия, и след изпращането с PHP валидирам получения html с HTMLPurifier. Проблема е, че той слага \ пред кавичките и в последствие хтмл-а не се визуализира правилно. Например, ето това възпроизвежда CKEditor-a:

Код:
<span style="font-size:36px;">

И след пюрифайъра става така:

Код:
<span style=\"font-size:36px;\">

Версията на PHP, която използвам е 5.2, не знам дали е от това проблема. Може би в самия конфиг на пюрифайъра трябва да сменя някоя опция, но не знам коя. Благодаря предварително.
 
При получаване на данните от формата валидирай към базата така :
PHP:
<?php
$text = addslashes(htmlspecialchars( $_POST['text']));
 mysql_query("INSERT INTO `text`( `text` ) VALUES ('$text')")or die(mysql_error()); 		

?>
 
dakata__92 каза:
При получаване на данните от формата валидирай към базата така :
PHP:
<?php
$text = addslashes(htmlspecialchars( $_POST['text']));
 mysql_query("INSERT INTO `text`( `text` ) VALUES ('$text')")or die(mysql_error()); 		

?>
Ти изобщо разбираш ли какво се опитвам да направя или само пишеш без да мислиш?
 
Когато извеждаш записаната информация (в твоя случай статия) ползвай stripslashes():
Код:
<?php
	$string = 'Някакъв "текст" с кавички и други "интересни неща"';
	$slashed_string = addslashes($string);
	
	echo 'String with slashes: '.$slashed_string.'<br />';
	echo 'String without slashes: '.stripslashes($slashed_string);
?>
 
Fakeheal каза:
Когато извеждаш записаната информация (в твоя случай статия) ползвай stripslashes():
Код:
<?php
	$string = 'Някакъв "текст" с кавички и други "интересни неща"';
	$slashed_string = addslashes($string);
	
	echo 'String with slashes: '.$slashed_string.'<br />';
	echo 'String without slashes: '.stripslashes($slashed_string);
?>
Ами те тези наклонени черти не се слагат просто така без причина. Ако ги махам а вътре има XSS изобщо не се предпазвам от атаката.
 
s_gerrard каза:
Fakeheal каза:
Когато извеждаш записаната информация (в твоя случай статия) ползвай stripslashes():
Код:
<?php
	$string = 'Някакъв "текст" с кавички и други "интересни неща"';
	$slashed_string = addslashes($string);
	
	echo 'String with slashes: '.$slashed_string.'<br />';
	echo 'String without slashes: '.stripslashes($slashed_string);
?>
Ами те тези наклонени черти не се слагат просто така без причина. Ако ги махам а вътре има XSS изобщо не се предпазвам от атаката.

Ти ги слагаш преди да ги запазиш в базата данни. Ще ги махаш, когато изкарваш информацията от базата данни. И фактически всичко в DB ти е чисто.
 
s_gerrard каза:
dakata__92 каза:
При получаване на данните от формата валидирай към базата така :
PHP:
<?php
$text = addslashes(htmlspecialchars( $_POST['text']));
 mysql_query("INSERT INTO `text`( `text` ) VALUES ('$text')")or die(mysql_error()); 		

?>
Ти изобщо разбираш ли какво се опитвам да направя или само пишеш без да мислиш?

Разбирам какво искаш да направиш, поради тази причина, аз избягвам въпросния проблем, при извеждането на информацията като си филтрирам данните на входа към базата. Това е моето решение ! Ти се опитваш да се предпазиш от вмъкването на скриптове примерно: <script>alert("Bazik")</script> ! Вярно е че този начин не филтрира напълно всички XSS атаки до колкото съм чел но ти позволява при извеждането да не ти отделя специалните синволи с черта . Вече, че ти си филтрираш данните при извеждането от базата отново е друга тема .
 
dakata__92 каза:
s_gerrard каза:
dakata__92 каза:
При получаване на данните от формата валидирай към базата така :
PHP:
<?php
$text = addslashes(htmlspecialchars( $_POST['text']));
 mysql_query("INSERT INTO `text`( `text` ) VALUES ('$text')")or die(mysql_error()); 		

?>
Ти изобщо разбираш ли какво се опитвам да направя или само пишеш без да мислиш?

Разбирам какво искаш да направиш, поради тази причина, аз избягвам въпросния проблем, при извеждането на информацията като си филтрирам данните на входа към базата. Това е моето решение ! Ти се опитваш да се предпазиш от вмъкването на скриптове примерно: <script>alert("Bazik")</script> ! Вярно е че този начин не филтрира напълно всички XSS атаки до колкото съм чел но ти позволява при извеждането да не ти отделя специалните синволи с черта . Вече, че ти си филтрираш данните при извеждането от базата отново е друга тема .
Е тогава на мен къв ми е кяра един път в базата филтрирам после разфитрирам и не се предпазвам от нищо само дето хабя процесорно време? Искам да разбера защо HTMLPurifier слага тези \ и как да го настроя за да не го прави.
 
HTML Purifier-a ги слага, за да те защити от SQL Injections. Ако ги махнеш си доста отворен към injections. Затова просто ги stripslashes()-вай, както ти показах горе. А, ако за XSS просто ползвай htmlspecialchars (но ме съмнява това да го няма в HTMLPurifier). :)
 
Филтрираш тогава по същия начин на изхода и си готов. Въпреки, че в базата са записани под кодирана форма символите и при извеждането на <script> В браузера ще ти се визуализира така с текст а в изходния код под кодираната форма qo;l script qo;l примерно .
 
Fakeheal каза:
HTML Purifier-a ги слага, за да те защити от SQL Injections. Ако ги махнеш си доста отворен към injections. Затова просто ги stripslashes()-вай, както ти показах горе. А, ако за XSS просто ползвай htmlspecialchars (но ме съмнява това да го няма в HTMLPurifier). :)
Има смисъл, но аз използвам MySQLi, така че те така или иначе ще влезнат. Ще потърся в документацията за такава опция.
 
Имам чувството, че си се залъгал някъде. Ето тук има доста примери и виж долу-горе как се правят нещата. Кое за какво е и прочие:
http://web-tourist.net/forum/viewtopic.php?t=83500
 
Всъщност проблема идвал заради magic_quotes_gpc. Просто добавих това в .htaccess файла ми и всичко се оправи.

Код:
php_flag magic_quotes_gpc Off
 

Back
Горе