对于一个小页面的CMS,我想替换script
以及人们可能用于恶意的其他标记。
我已经尝试了strip_tags
和preg_replace
,但由于某些原因它无法正常工作。
单页CMS有6个要编辑的字段。这些保存在纯文本文件中。
当我编辑其中一个时,我需要删除所有标记,例如script
,embed
,object
,<iframe>
和其他标记。
我已经检查了HTML Purifier,但我不知道这应该如何工作,因为我不熟悉php。我觉得看起来有点太大了。
这是代码(此处我尝试从名为script
的文本区域中移除newscontent
标记中的代码:
<?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'));
?>
答案 0 :(得分:3)
您的代码无效,因为您正在对变量$newscontent
执行替换,但将$_POST['newscontent']
写入文件。我猜你已经注册了全局变量(这很糟糕),否则会产生错误。
我建议你坚持使用HTMLPurifier。如果他们有“不良意图”,那么人们可以在文本中添加许多很多不好的东西,而且你的方法甚至不会划伤表面。例如,如果您要修复代码,则不会阻止人们添加如下内容:
<img src="http://www.google.com/logo.gif" onload="javascript:bad stuff here" />
更不用说不同字符集的复杂性了。
答案 1 :(得分:-1)
&LT;是正则表达式中的一个特殊字符,你需要逃脱它。
$newscontent = preg_replace('/\<(script|object|embed).+?\<\/\1\>/im', '', $newscontent);