对于一个小的一页的内容管理系统,我想取代script
和其他标签,人们可能会使用坏的意图。
我试过strip_tags
和preg_replace
,但由于某种原因它不能工作。
一页CMS有6个要编辑的字段。这些文件保存在纯文本文件中。当我编辑其中一个时,我需要它来删除所有的标签,如script
,embed
,object
,<iframe>
和其他标签。
我已经检查过HTML Purifier了,但我不明白它是如何工作的,因为我对php不是很熟悉。看起来有点太大了,我想我的需求。
下面是代码(这里我尝试从名为newscontent
的文本区域的script
标记中删除标记):
<?php
if (isset($_POST['edit'])) {
$newscontent = preg_replace('/<script.+?<\/script>/im', '', $newscontent);
if (file_put_contents('title.txt', utf8_encode($_POST['title'])) !== FALSE &&
file_put_contents('subtitle.txt', utf8_encode($_POST['subtitle'])) !== FALSE &&
file_put_contents('datum.txt', utf8_encode($_POST['datum'])) !== FALSE &&
file_put_contents('time.txt', utf8_encode($_POST['time'])) !== FALSE &&
file_put_contents('timemin.txt', utf8_encode($_POST['timemin'])) !== FALSE &&
file_put_contents('newscontent.txt', utf8_encode($_POST['newscontent'])) !== FALSE
)
echo '<p class="succes">Your changes are saved</p>', "\n";
}
$title = utf8_decode(file_get_contents('title.txt'));
$subtitle = utf8_decode(file_get_contents('subtitle.txt'));
$datum = utf8_decode(file_get_contents('datum.txt'));
$time = utf8_decode(file_get_contents('time.txt'));
$timemin = utf8_decode(file_get_contents('timemin.txt'));
$newscontent = utf8_decode(file_get_contents('newscontent.txt'));
?>
发布于 2012-08-19 03:12:16
您的代码不起作用,因为您正在对变量$newscontent
执行替换,但是将$_POST['newscontent']
写入文件。我猜你已经开启了注册全局变量(这是不好的),否则会产生一个错误。
我建议您坚持使用HTMLPurifier。如果人们有“不好的意图”,他们可能会在文本中添加很多很多不好的东西,而你的方法甚至没有触及到表面。例如,如果你要修复你的代码,它不会阻止人们添加类似这样的东西:
<img src="http://www.google.com/logo.gif" onload="javascript:bad stuff here" />
更不用说不同字符集的复杂性了。
发布于 2012-08-19 03:07:29
<是正则表达式中的特殊字符,您需要对其进行转义。
$newscontent = preg_replace('/\<(script|object|embed).+?\<\/\1\>/im', '', $newscontent);
https://stackoverflow.com/questions/12021434
复制相似问题