V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
yestodayHadRain
V2EX  ›  问与答

大家平时写接口时会不会对前端的参数做一些 js 代码过滤?或者说是 xss 攻击?

  •  
  •   yestodayHadRain · 2019-04-02 10:53:02 +08:00 · 1420 次点击
    这是一个创建于 2068 天前的主题,其中的信息可能已经有所发展或是发生改变。
    • 如题,上周写接口的时候同事和我说你有没有考虑过 xss 攻击.我不是太明白这个,同事就和我举了一个例子:比如有人故意在前端的输入框内写 js 代码,死循环里写一个 alert,这样读出来的时候 js 一执行 就不会不停的弹弹框.
    • 当时感觉比较有道理,后来仔细一想,到底要不要做?因为楼主用的是 java,Mybatis 好像自动对 sql 注入做了过滤.那这样的话,如果用户自己非要输入 js 死循环代码,不会影响服务器,只是影响客户端的展示而已.那这样的话还需要做过滤吗?
    • 求各位大佬指教
    11 条回复    2019-04-02 18:18:47 +08:00
    jifengg
        1
    jifengg  
       2019-04-02 12:30:50 +08:00   ❤️ 1
    xss 可以由前端控制。输入随便,输出的时候,前端不能直接输出,要做转义等等的。

    但是接口对前端传过来的数据,统一采用“不信任”原则,你需要用到的数据,就需要做校验。
    Va1n3R
        2
    Va1n3R  
       2019-04-02 12:42:26 +08:00 via Android   ❤️ 1
    xss 的危害并不是执行死循环之类的 self-xss,而是在于对同域数据的读取。比如你 api 的域名是你司的某个业务的子域名,那么你不做过滤的后果就是危害了整个业务的用户信息泄露(xss 窃取 cookie),更甚者可以通过 xss 接管后台管理账户或者探测进而控制后台功能。
    lllllliu
        3
    lllllliu  
       2019-04-02 14:56:15 +08:00   ❤️ 1
    永远不要相信用户的输入。前端过滤一遍,后端除了框架的过滤,再结合情况自己写验证规则,反正写一次全部都可以用。再结合实际情况能用数据类型约束就用,别一直都 string。必要的数据加密,解密都是可以做的。
    yestodayHadRain
        4
    yestodayHadRain  
    OP
       2019-04-02 16:00:02 +08:00
    @Va1n3R 大佬可不可以分享下,你或者你们公司当前对 xss 过滤是怎么做的呢?
    WordTian
        5
    WordTian  
       2019-04-02 16:11:50 +08:00
    建议做一下,XSS 漏洞的威胁等级还是挺高的
    crab
        6
    crab  
       2019-04-02 16:17:19 +08:00   ❤️ 1
    [只是影响客户端的展示而已] = =!
    https://ctf-wiki.github.io/ctf-wiki/web/xss/
    yestodayHadRain
        7
    yestodayHadRain  
    OP
       2019-04-02 16:19:47 +08:00
    @crab 对不起,大佬.请原谅我的无知
    yestodayHadRain
        8
    yestodayHadRain  
    OP
       2019-04-02 16:20:08 +08:00
    @WordTian 可不可以说一下具体怎么实现,给个思路就好
    WordTian
        9
    WordTian  
       2019-04-02 16:44:46 +08:00 via Android
    比较常见的做法是对输入加过滤器
    搜索 XSS Filter,应该有不少别人写好的过滤器,你可以瞅瞅
    night98
        10
    night98  
       2019-04-02 17:06:01 +08:00
    怎么可能在接口里写,这种都是全局拦截并转义的
    yestodayHadRain
        11
    yestodayHadRain  
    OP
       2019-04-02 18:18:47 +08:00
    @WordTian
    @night98 ok,明白了,就是面向后端所有对外开放接口拦截,写一个拦截器过滤.然后过滤器现在大家写好的有很多,我可以拿来复用对吧.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5054 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 09:45 · PVG 17:45 · LAX 01:45 · JFK 04:45
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.