Tomo HTML como una cadena y luego lo analizo para cambiar todos los enlaces href a otra cosa. Sin embargo, esto funciona cuando la página HTML tiene algunas etiquetas de script JS, es decir, <script>
se elimina! Por ejemplo esta línea:
<script type="text/javascript" src="/js/jquery.js"></script>
Se cambia a:
[removed][removed]
Sin embargo, me gustaría tenerlo todo. Esta es mi función:
function parse_html_code($code, $code_id){
libxml_use_internal_errors(true);
$xml = new DOMDocument();
$xml->loadHTML($code);
foreach($xml->getElementsByTagName("a") as $link) {
$link->setAttribute("href", CLK_BASE."clk.php?i=$code_id&j=" . $link->getAttribute("href"));
}
return $xml->saveHTML();
}
Agradezco cualquier ayuda en esto.
Respuestas
2 para la respuesta № 1CodeIgniter "s bogus anti-XSS‘ características ’está gestionandola entrada de su script antes de que DOMDocument lo vea. Las etiquetas de script y varias otras cadenas se eliminarán, se reemplazarán por "[eliminado]", de otro modo, sin ningún motivo. Vea el sistema /raries / Security.php Módulo para los detalles más embarazosos.
Para desactivar esta característica equivocada, configure $config["global_xss_filtering"]= FALSE
. Tendrás que asegurarte de que tu script seapor supuesto, en realidad el manejo de cadenas que se escapan correctamente (por ejemplo, siempre la entrada de usuarios que escapan a HTML cuando se incluye en una página). Pero entonces tienes que hacer eso de todos modos; anti-XSS no soluciona los problemas de procesamiento de texto, solo los oculta.
$link->setAttribute("href", CLK_BASE."clk.php?i=$code_id&j=" . $link->getAttribute("href"));
Necesitarás urlencode
ese getAttribute("href")
(y potencialmente $ code_id si no es solo numérico o algo así).