• 主页
  • 系列总集
  • OpenCV
  • CMake
  • iOS
  • Java
  • 前端
所有文章 关于我

  • 主页
  • 系列总集
  • OpenCV
  • CMake
  • iOS
  • Java
  • 前端

HTML的大量DOM操作和防XSS

2016-09-04

DOM操作

在好多百度的答案里,如果要对DOM进行操作,都是直接append,然后拼接出来HTML字符串

1
2
3
4
5
6
$("body")
.append(
'<div id="iamloading__box" data-load="load">'
+ '<div id="iamloading__box_center"><img id = "loading-image" src= ""></div>'
+ '</div>'
);

这就会产生一个问题 好多XSS都是这么产生的

使用JQuery防止XSS

为了防止XSS,而且拼接HTML字符串是在是太无语了,感觉笨笨的 JQuery 1.4 可以通过函数拼接HMTL标签并且防止XSS

这个函数是 jQuery( html, attributes ) 在1.4之后加入JQuery

1
$("<div>",{id:"point",class:"blank"}).appendTo($dom)

这样就会产生一个

1
<div id="point" class="blank"></div>

的DOM节点,并且使用appendTo被拼接到某个dom后边,即使在class里故意填入XSS代码,也会被Escape成内容防止XSS产生

1
2
3
var xss = '<script>alert("xss")</script>'
var attr = {class:xss}
$('<option>',attr).appendTo($dom)

大量DOM操作

虽然使用JQuery可以防止XSS,但是如果遇见大面积的DOM操作,还是比较麻烦的,特别是在Table里循环接收tr的时。不仅可读性差,而且不好操作。

前端的大量DOM操作一直都是一个比较纠结的问题,我查了一些解决方案,AngularJS,React等等,都感觉太复杂了,而且文件都比较大,其实React是一个比较好的方案,毕竟是Facebook的看家本领,但是学习曲线又太高,最后我发现了一个叫Riot的库,它专门批判了一翻React来表扬自己,确实挺好用的,功能比较简单,而且兼容其它的前端库

具体方案可以参考[Riot API][]或者我的简单教程。

赏

请问老板还招人么(/ω\)

支付宝
微信
  • JavaScript
  • FrontEnd
  • HTML
  • Tips

扫一扫,分享到微信

微信分享二维码
Riot简单教程
MyBatis动态语句:参数传递和传递表名
© 2021 Alan Li
Hexo Theme Yilia by Litten
  • 所有文章
  • 关于我

tag:

  • iOS
  • Java
  • Collection
  • Python
  • Shell
  • CMake
  • Memory
  • JavaScript
  • Architecture
  • AnchorPoint
  • Android
  • Web
  • Annotation
  • AFNetworking
  • Window
  • ViewController
  • AutoLayout
  • Dozer
  • CoreAnimation
  • Cycle Retain
  • Block
  • UI
  • IDE
  • FrontEnd
  • CSS
  • Category
  • TableViewCell
  • Security
  • Net
  • JSP
  • Spring
  • C
  • MyBatis
  • Date
  • React
  • GCD
  • UITouch
  • Gesture
  • UIControl
  • Git
  • HTML
  • HTTPS
  • HTTP
  • Servlet
  • Server
  • DataBase
  • MySQL
  • Linux
  • Tutorial
  • Ajax
  • Type
  • JQuery
  • JSON
  • Exception
  • Parameter
  • Reflect
  • Thread
  • Sort
  • KVO
  • MKMapKit
  • Overlay
  • Maven
  • Configure
  • Tips
  • Transaction
  • Swift
  • NavigationBar
  • Nginx
  • Runtime
  • OpenCV
  • Property
  • Playground
  • Protocol
  • Redux
  • ScrollView
  • Session
  • Cookie
  • Shiro
  • Error
  • Singleton
  • RegEx
  • StackView
  • StatusBar
  • Base64
  • Socket
  • TCP
  • IP
  • TextField
  • CALayer
  • UILabel
  • View
  • Animation
  • Xcode
  • Hexo
  • Terminal
  • OC
  • Device
  • Log
  • Image
  • JUnit
  • Oval
  • Archive
  • XSS
  • Compiler
  • Aspect
  • Responder
  • Class
  • FireWall
  • RetainCount
  • Const
  • Frame
  • String
  • Symbols
  • Framework
  • CocoaPods
  • Unity
  • Message
  • Button
  • AuthorizationStatus
  • Struct
  • XCTest
  • NSNotification
  • Contact

    缺失模块。
    1、请确保node版本大于6.2
    2、在博客根目录(注意不是yilia根目录)执行以下命令:
    npm i hexo-generator-json-content --save

    3、在根目录_config.yml里添加配置:

      jsonContent:
        meta: false
        pages: false
        posts:
          title: true
          date: true
          path: true
          text: false
          raw: false
          content: false
          slug: false
          updated: false
          comments: false
          link: false
          permalink: false
          excerpt: false
          categories: false
          tags: true
    

我写的,大概率是错的。。。。。