imxz
V2EX  ›  问与答

防范 xss 使用 htmlspecialchars 够了吗?

  •  
  •   imxz · Dec 13, 2014 · 4265 views
    This topic created in 4255 days ago, the information mentioned may be changed or developed.
    php程序。

    用户输入数据在存入数据库前 先 htmlspecialchars($data);

    前台显示的时候 直接从数据库取出来然后 echo $data;

    这样是否ok? 会有哪些潜在的危险 ?

    还有什么更好的处理方式 ?

    谢谢 !
    12 replies    2014-12-13 23:07:09 +08:00
    kmvan
        1
    kmvan  
       Dec 13, 2014
    我认为输入前不用处理(但要注意sql注入),输出前才去处理这样比较好,wp就是这样的。
    (貌似我很多回答都拿 WP 做盾牌:D)
    imxz
        2
    imxz  
    OP
       Dec 13, 2014
    @kmvan 谢谢你的回复。

    也就是说数据库中就原样存储用户的输入数据,然后在输出前进行处理?

    输入输出前处理有何区别呢 ?
    invite
        3
    invite  
       Dec 13, 2014
    要这么容易,还需要防XSS?
    adjusted
        4
    adjusted  
       Dec 13, 2014
    直接输出应该不会有问题吧
    imxz
        5
    imxz  
    OP
       Dec 13, 2014
    @invite 说点有质量的观点比较有意义。
    txlty
        6
    txlty  
       Dec 13, 2014
    防xss难点是富文本编辑器。
    slowgen
        7
    slowgen  
    PRO
       Dec 13, 2014   ❤️ 1
    htmlspecialchars一般只能防范非富文本的内容
    要是用了ueditor,tinyMCE之类的富文本编辑器,直接过滤html标签与<>这些敏感字符是不行的,php过滤富文本的库个人推荐htmlpurifier,但是针对富文本的过滤一般比较占用资源,建议入库前过滤
    imxz
        8
    imxz  
    OP
       Dec 13, 2014
    @shuimugan 非常感谢!
    Ryans
        9
    Ryans  
       Dec 13, 2014
    DOM XSS 有无了解?
    imxz
        10
    imxz  
    OP
       Dec 13, 2014
    @Ryans 谢谢 我去了解下
    zomco
        11
    zomco  
       Dec 13, 2014
    我的理解是,XSS本质上是输出点存在恶意脚本,输入什么是不用管的,输出点做好敏感字符过滤就可以了。再有,输入时做过滤的话,存到数据库里信息已经有损的了。。。
    imxz
        12
    imxz  
    OP
       Dec 13, 2014
    @zomco 谢谢你!

    我也是认为输入做过滤的话会对信息有损,但是我又考虑到性能,输入只做一次处理就够了,以后显示信息就可以无脑输出,但是把过滤放到输出来处理的话,则每次输出都要处理一次,感觉对性能会有损。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2374 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 35ms · UTC 16:01 · PVG 00:01 · LAX 09:01 · JFK 12:01
    ♥ Do have faith in what you're doing.