php html过滤

国产_凌凌漆 2016-07-11 04:42:57

用户通过编辑器录入的内容是带HTML样式的,后台入数据库的时候,要不要使用 htmlspecialchars 先进行编码,但显示的时候又要进行htmlspecialchars_decode,感觉就没意义了。一般做法是怎么弄来防止XSS等攻击的,是要匹配具体的标签吗?
...全文
214 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
一起混吧 2016-07-21
  • 打赏
  • 举报
回复
引用 9 楼 qq_28492539 的回复:
[quote=引用 6 楼 jordan102 的回复:] 插入时不需要进行编码,取出显示时可以用htmlspecialchars编码一下防止XSS攻击。
你们是没有认真看问题吗, 显示时用htmlspecialchars编码一下,那用户输入的样式、排版的HTML标签就没用了?[/quote] 那就要匹配具体标签了,反正直接输出肯定是不行的。
智商众筹 2016-07-21
  • 打赏
  • 举报
回复
学习一下 这种问题如果想从根本解决 我想还是参考markdown那种,几种格式都定义好,然后将格式的标签固定,里面的内容全部htmlspecialchars,这样就能保证无脚本了吧,个人想法
国产_凌凌漆 2016-07-21
  • 打赏
  • 举报
回复
引用 6 楼 jordan102 的回复:
插入时不需要进行编码,取出显示时可以用htmlspecialchars编码一下防止XSS攻击。
你们是没有认真看问题吗, 显示时用htmlspecialchars编码一下,那用户输入的样式、排版的HTML标签就没用了?
yuexiashanghua 2016-07-15
  • 打赏
  • 举报
回复
帮忙看看这个网站还能怎么改进,第一次做,实在丑 www.xiantingmuyi.com 求指正,非常感谢
  • 打赏
  • 举报
回复
【1】网页上实际上输出的就是js脚本语言。我们之所以转移“<”,“>”,主要是避免页面被插入脚本。你使用htmlspecialchars转移之后再使用htmlspecialchars_decode就一点意义都没有。这边是这里就被插入了一个JS alert语句。
$str="<script>alert(\"haha\");</script>";
echo htmlspecialchars_decode($str);
alert()依旧会被触发。 所以,不想插入脚本肯定要使用htmlspecialchars将预定义的字符 "<" (小于)和 ">" (大于)转换为 HTML 实体。 【2】匹配具体标签也是很麻烦的。标签中间放一些注释就傻了。不过恶意使用preg_replace把所有的注释符号全部匹配表,之后再匹配是否存在script。这也是一个方法。

$preg_rule='/\!|\script|\-|/';
$data = preg_replace($preg_rule,"",$data); //data为客户端传来的字符串
除了注入脚本。还要小心SQL注入,这边有篇关于SQL注入的文章http://www.daimatree.com/dll_website/dll_showHTML.php?html_url=safe_SQL_Injection_Attack
一起混吧 2016-07-14
  • 打赏
  • 举报
回复
插入时不需要进行编码,取出显示时可以用htmlspecialchars编码一下防止XSS攻击。
国产_凌凌漆 2016-07-14
  • 打赏
  • 举报
回复
引用 4 楼 wanghejun695 的回复:
[quote=引用 3 楼 qq_28492539 的回复:] [quote=引用 2 楼 zhangsheng_1992 的回复:] 如果不转义标签 防止XSS是一个很难的事情 js代码可以通过很多方式运行
但是转义了,显示的时候还是转回来了啊,因为需求是要显示HTML的样式之类的,所以我是想问有没有必要htmlspecialchars 再入库,因为到头来还是要htmlspecialchars_decode的[/quote] 你认为这是所谓的麻烦么[/quote] 不是麻烦,而是想知道意义在哪里
王大西walker 2016-07-13
  • 打赏
  • 举报
回复
引用 3 楼 qq_28492539 的回复:
[quote=引用 2 楼 zhangsheng_1992 的回复:] 如果不转义标签 防止XSS是一个很难的事情 js代码可以通过很多方式运行
但是转义了,显示的时候还是转回来了啊,因为需求是要显示HTML的样式之类的,所以我是想问有没有必要htmlspecialchars 再入库,因为到头来还是要htmlspecialchars_decode的[/quote] 你认为这是所谓的麻烦么
国产_凌凌漆 2016-07-13
  • 打赏
  • 举报
回复
引用 2 楼 zhangsheng_1992 的回复:
如果不转义标签 防止XSS是一个很难的事情 js代码可以通过很多方式运行
但是转义了,显示的时候还是转回来了啊,因为需求是要显示HTML的样式之类的,所以我是想问有没有必要htmlspecialchars 再入库,因为到头来还是要htmlspecialchars_decode的
zhangsheng_1992 2016-07-11
  • 打赏
  • 举报
回复
如果不转义标签 防止XSS是一个很难的事情 js代码可以通过很多方式运行 比如 1.带src属性 或者href属性的标签 如a标签 img标签 js的特点是可以跨站引用 如果我可以在我的站点引用谷歌的js 2.就算是
<script>
标签 也不是那么容易过滤的 比如我可以大小写混编 如 sCripT 活着通过通过注释 比如我要输入
 javascript:alert(sb)
我可以这样
 java<!---->script:alert(sb)
你直接匹配javascript就无法过滤 因为输出到浏览器上那段相当于html的注视 3.我可以通过字符转码的方式 10进制不行我就16进制 反正你的想办法绕开你的程序匹配就行 我当年在新浪工作那会 公司有自己开发的xss扫描工具 天天一帮子开发没事就坐那扫xss漏洞 就这也都不是百分之百能避免的 每周都会出现新的方式 真是道高一尺魔高一丈 有的方式你跟们就想不到
tottyandbaty 2016-07-11
  • 打赏
  • 举报
回复
https://gist.github.com/ozkanozcan/3378054

21,882

社区成员

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

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