V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
checkout
V2EX  ›  PHP

php 入库前需要用 htmlspecialchars 把特殊字符"比如<等"转换吗?还是说原样入库,显示的时候用 htmlspecialchars?

  •  
  •   checkout · 2016-12-02 09:14:45 +08:00 · 3999 次点击
    这是一个创建于 2946 天前的主题,其中的信息可能已经有所发展或是发生改变。
    24 条回复    2016-12-03 13:50:23 +08:00
    orderc
        1
    orderc  
       2016-12-02 09:18:53 +08:00
    原样入库,输出转义
    Time2
        2
    Time2  
       2016-12-02 09:19:18 +08:00
    原样入库,保存攻击样本,输出做处理
    snriud
        3
    snriud  
       2016-12-02 09:20:09 +08:00
    入库不需要吧?不过记得转义引号。显示的时候用 htmlspecialchars 以防止有人插入不在预期内的标签。
    linescape
        4
    linescape  
       2016-12-02 09:24:24 +08:00
    strip_tags 去掉 script , nl2br 转一下换行,再 pdo 绑定插入,爱咋注入咋注入
    MrJing1992
        5
    MrJing1992  
       2016-12-02 09:29:45 +08:00
    原样入库,输出转义。
    否则,用户要编辑他的内容时,你没办法给他原来的内容。
    realpg
        6
    realpg  
       2016-12-02 10:38:59 +08:00
    原样入库 输出转义
    搞不懂 ueditor 的傻逼逻辑 所有空格转成 nbsp 最后英文都不会换行
    otakustay
        7
    otakustay  
       2016-12-02 11:21:15 +08:00
    @realpg 找人问了问, getContent 有一个 ignoreBlank 参数,设为 true 就不会转了
    realpg
        8
    realpg  
       2016-12-02 11:25:59 +08:00
    @otakustay
    求详细
    文档我都翻烂了
    blank 相关的东西我也直接下载了整篇文档搜过了 只有 htmlPaser 里面有个跟 blank 相关的 是忽略内容里的 blank
    otakustay
        9
    otakustay  
       2016-12-02 11:51:23 +08:00
    @realpg 我从 demo 上看似乎 getContent()本身就能获取你想要的内容,是否有些什么配置不大对?

    realpg
        10
    realpg  
       2016-12-02 12:38:27 +08:00
    @otakustay
    你嵌入一个直接提交表单试试 都没用 getContent 直接提交表单的
    sagaxu
        11
    sagaxu  
       2016-12-02 12:51:04 +08:00   ❤️ 1
    url 转义, html 转义, xml 转义, sql 转义,正则转义,需要转义的地方很多,如果入库前就过滤,跟为了不得性病把自己阉了有什么区别?
    lqs
        12
    lqs  
       2016-12-02 12:58:29 +08:00
    原样入库,并使用默认打开转义的模版引擎来渲染前端。
    lijinma
        13
    lijinma  
       2016-12-02 13:03:30 +08:00
    @sagaxu 你这个比喻很准确。。。
    TaMud
        14
    TaMud  
       2016-12-02 13:13:38 +08:00
    原样入库!!!!
    输出时,根据业务需求转义
    省逻辑,省力
    Felldeadbird
        15
    Felldeadbird  
       2016-12-02 13:14:04 +08:00
    我是先转义在入库的。要是输出时没做过滤,不就产生了安全问题么。
    linkdesu
        16
    linkdesu  
       2016-12-02 14:00:54 +08:00
    @Felldeadbird 年轻人,听前辈们一句吧~~
    bombless
        17
    bombless  
       2016-12-02 14:03:50 +08:00
    你不原样入库就产生了很多逗逼应用的问题:在 app 看的时候多了很多&nbsp;之类的奇怪的东西 233
    而且你的数据也可能会因为前端改版什么的需要以 JSON 之类的格式出现,到时候你准备怎么办 233
    Felldeadbird
        18
    Felldeadbird  
       2016-12-02 15:15:38 +08:00
    @linkdesu 反正我做了这么多年开发,没遇到过 先转义 有什么让人困惑的问题。
    z5864703
        19
    z5864703  
       2016-12-02 15:27:37 +08:00
    在看到这帖子之前都是入库前过滤,现在改成了出库过滤了。。。
    现在想了想,重点看业务,一般情况下输出过滤吧,比较好控制各种输出需求。不然把原始信息都丢了,到时候处理误报之类都没的搞了
    msg7086
        20
    msg7086  
       2016-12-03 00:25:26 +08:00
    @Felldeadbird 首先你怎么转译?转成 HTML 要你输出 JSON 怎么办?
    你做了这么多年开发,不会没碰过 HTML 以外的格式吧。
    Felldeadbird
        21
    Felldeadbird  
       2016-12-03 00:30:07 +08:00 via iPhone
    @msg7086 输出 json 前转换过来不就可以了吗?我做 web 除了 html 之外,其次就是 xml 。不知道有什么好疑惑的。
    aksoft
        22
    aksoft  
       2016-12-03 09:02:10 +08:00
    thinkphp 好像是转的
    mingyun
        23
    mingyun  
       2016-12-03 10:51:58 +08:00
    @sagaxu
    aogg
        24
    aogg  
       2016-12-03 13:50:23 +08:00
    我目前就是入库时转实体,

    如:
    1 、一个 title 值,对应 varchar 的 mysql 字段,这时候用 htmlentities 转为实体,然后入库
    2 、一个 ue 数据,对应 text 的 mysql 字段,这时候用正则 preg_replace_callback 找到<script>标签,并将标签转为实体,然后入库
    3 、以上只考虑都是 utf8 格式数据的情况,考虑入库时转实体也是为了输出不用每次都处理

    以上,不知道对不对。也没读懂上面说的输出时在转译,是为了什么。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1015 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 21:07 · PVG 05:07 · LAX 13:07 · JFK 16:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.