论坛程序用HTML在线编辑器的话,怎么过滤用户的输入呢?

stan23 2006-11-14 04:26:48
不过滤会有很多危险的HTML代码
又要保留一些必须图片、FLASH的标签

找了半天找到相关代码,谁做过这个?
...全文
464 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
街头小贩 2006-11-17
  • 打赏
  • 举报
回复
老生长谈的问题
lianpingtc 2006-11-17
  • 打赏
  • 举报
回复
谢谢
lucklrj 2006-11-17
  • 打赏
  • 举报
回复
我以前写的,你自己参考下,不完全安全
<?php
/**
* 过滤在线编辑器产生的不安全html代码.
*
* PHP versions 4 and 5
*
* @copyright 版权所无,任意传播.
* @link http://www.52sunny.net
* @name html过滤
* @version v 0.0.10
* @author Lucklrj (sunny_lrj@yeah.net,qq:7691272)
* @lastmodified 2006-06-09 10:42 (Tue, 2006-06-09)
* @notice 此版本只过滤js,框架,表单。
作者能力有限,使用本程序若产生任何安全问题,与本人无关。
欢迎来信与我交流。
*/
$str="<tr><td bgcolor='#FFFFFF'>
<div style='url(123.offsetWidth)>";
//$str="url(javascript:x)";

/*不需要过滤的数组*/
$htm_on=array(
"<acronym","acronym>",
"<baseFont","baseFont>",
"<button","button>",
"<caption","caption>",
"<clientInformation","clientInformation>",
"<font","font>",
"<implementation","implementation>",
"<button","button>",
"<location","location>",
"<option","option>",
"<selection","selection>",
"<strong","strong>");

$htm_on_uper=array(
"<ACRONYM","ACRONYM>",
"<BASEFONT","BASEFONT>",
"<BUTTON","BUTTON>",
"<CAPTION","CAPTION>",
"<CLIENTINFORMATION","CLIENTINFORMATION>",
"<FONT","FONT>",
"<IMPLEMENTATION","IMPLEMENTATION>",
"<BUTTON","BUTTON>",
"<LOCATION","LOCATION>",
"<OPTION","OPTION>",
"<SELECTION","SELECTION>",
"<STRONG","STRONG>");

/*字符格式*/
$str=strtolower($str);
$str=preg_replace("/\s+/", " ", $str);//过滤回车
$str=preg_replace("/ +/", " ", $str);//过滤多个空格

/*过滤/替换几种形式的js*/
$str=preg_replace("/<(script.*?)>(.*?)<(\/script.*?)>/si","",$str);//删除<script>。。。</script>格式,
//$str=preg_replace("/<(script.*?)>(.*?)<(\/script.*?)>/si","<\\1>\\2<\\3>",$str);//替换为可以显示的,

$str=preg_replace("/<(script.*?)>/si","",$str);//删除<script>未封闭
//$str=preg_replace("/<(script.*?)>/si","<\\1>",$str);//替换未封闭

/*删除/替换表单*/
$str=preg_replace("/<(\/?form.*?)>/si","",$str);//删除表单
//$str=preg_replace("/<(\/?form.*?)>/si","<\\1>",$str);//替换表单

$str=preg_replace("/<(i?frame.*?)>(.*?)<(\/i?frame.*?)>/si","",$str);//删除框架
//$str=preg_replace("/<(i?frame.*?)>(.*?)<(\/i?frame.*?)>/si","<\\1>\\2<\\3>",$str);//替换框架

/*过滤on事件*/
$str=preg_replace("/href=(.+?)([\"|\'| |>])/ie","'href='.strtoupper('\\1').'\\2'",$str);//把href=涉及到的on转换为大写。
$str=str_replace($htm_on,$htm_on_uper,$str);//把<font,font>换为大写,dhtml标签字符,正则判断太烦琐,采用转换办法。
$str=preg_replace("/(on[^ \.<>]+?)([ |>])/s","\\2",$str);//取掉on事件

/*过滤超级连接的js*/
$str=preg_replace("/(href|src|background|url|dynsrc|expression|codebase)[=:\(]([ \"\']*?\w+\..*?|javascript|vbscript:[^>]*?)(\)?)([ >\/])/si","\\1='#' \\3\\4",$str);//取掉href=javascript:

//返回小写字符
$str=strtolower($str);
$str=str_replace("&","&",$str);
echo $str;
?>
lucklrj 2006-11-17
  • 打赏
  • 举报
回复
如果你要使用在线编辑器的化,
在服务端你要过滤很多,具体找找跨站攻击 相关的吧。
lianpingtc 2006-11-17
  • 打赏
  • 举报
回复
怎么没人说话啊.我在在线等啊
lianpingtc 2006-11-17
  • 打赏
  • 举报
回复
各位高手:我也有个表单的问题:
我用php做了个留言版.用户提交信息时,有专门页面act.php检测!如果输入不完整,就回到原来留言的页面.但用户原先输入的内容已经刷新掉了.想问一下怎么保留原先输入的内容.<急!!>
tod204 2006-11-16
  • 打赏
  • 举报
回复
请使用inputfilter.这样你就不用担心
afoskoo 2006-11-16
  • 打赏
  • 举报
回复
strip_tags 可过滤指定的HTML标签
过滤空格 preg_replace("/ +/"," ",$string);
stan23 2006-11-16
  • 打赏
  • 举报
回复
比如CSDN的BLOG,用的是FCK,我也可以插入JAVASCRIPT:
http://blog.csdn.net/stan23/archive/2006/11/16/1389013.aspx
lianpingtc 2006-11-16
  • 打赏
  • 举报
回复
想问各位高手:留言版怎么过滤掉用户输入的空格?
stan23 2006-11-16
  • 打赏
  • 举报
回复
楼上没用过HTMLAREA或FCK吗?
xuenping 2006-11-16
  • 打赏
  • 举报
回复
好东东收藏一下
lianpingtc 2006-11-16
  • 打赏
  • 举报
回复
谢谢!还是不能解决,能不能具体点
idealabc 2006-11-16
  • 打赏
  • 举报
回复
找个UBB,都是用正则过滤的
lianpingtc 2006-11-16
  • 打赏
  • 举报
回复
我也想知道这个问题.假如别人留言时输入html代码,怎么样把它过滤掉.<急!!在线等!>
PleaseDoTellMeWhy 2006-11-16
  • 打赏
  • 举报
回复
所见即所得的那种编辑器,他也是UBB的形式的,只不过多了一道工序,
让你不用手工输入那些UBB代码了!
你也可以affirm那些用户的数据立即替换为UBB代码,提交的时候,
只替换正确的UBB代码为HTML格式,其它的一律不管!

恶意的JS代码,他也必须是<script>开头</script>结尾
你把<和>在PHP脚本中替换掉!
<替换为<
>替换为>
输出到HTML时候显示< 和 >
这样JS还能执行吗?
cho__cho 2006-11-16
  • 打赏
  • 举报
回复

收藏

潜力T
stan23 2006-11-16
  • 打赏
  • 举报
回复
谢谢各位的回答,但是问题没解决:
1、我用的HTML在线编辑器是HTMLAREA那样的所见即所得的,不是用UBB的
2、用JS过滤的话,可以被用户绕过
3、不过滤我觉得是有危险的,比如用户可能输入一些JS恶意代码
juzibaby 2006-11-15
  • 打赏
  • 举报
回复
为什么要屏蔽呢?你觉得写些程序内容就会攻击到服务器吗?这些只不过是字符串罢了
rf123 2006-11-15
  • 打赏
  • 举报
回复
有需要过滤吗,输出时htmlspecialchars就可以了
加载更多回复(7)

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧