里主要是介绍下防止XSS的时机判断,让你明白XSS实质应该防止的位置
什么是XSS攻击
它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的。
XSS是黑客,恶意用户常用的注入漏洞,也是网站安全要考虑的问题
以Think PHP3.2框架为例
框架为了防止XSS(跨站脚本, cross site script)危害. 用户通过script脚本, 控制web页面的行为. 采用的策略: 在接收到浏览器端数据后, 将数据转换为HTML实体编码
这是框架的默认策略, 很low, 现在几乎不用该策略
在接收数据时, 就完成实体编码转换. 主要的问题, “数据库中存储的不在是原始数据了. 而是处理过之后的数据”.
html实体编码后的数据
目前的策略是:
在数据输出到页面时, 才进行html实体编码转换.
都是使用HTML实体编码转换, 但是, 时机不同. 合理的策略是输出时. 而不是输入时.
原因: script脚本, 只有在浏览器端运行, 才有执行意义. 存储在数据库中,没有任何危害!
数据库中不知道用户到底真正输入的是什么!
方案:
关闭, 输入时, 自动实体编码处理
将默认的过滤器关掉
将过滤方法默认为空
输出时, 对可能发生的注入字段, 进行过滤:
模板中完成:
在需要的字段文章添加过滤
效果:
数据中, 存储的是原始数据, 未转换编码的数据
保存的是原始数据
输出时, 数据为实体编码:
详细讲解太长,再简单说一下对于Html编辑器的XSS的处理 应该是另一个方式
原因:
其他字段, title字段, 输出时, 直接转换为实体标记即可.
但是, 对于描述这种html编辑器的内容. 输出时不能直接转换. 因为 html代码, 对于数据是有意义的.
处理方案: 将内容中的script部分, 转换成实体. 非script部分, 不去处理.
实现:
自定义一个过滤器函数
使用正则替换实现,只对script标签进行处理
定义成一个方法,再需要选择的时候选用该函数
结果
数据库中的数据:
输出时:
本文主要是介绍XSS防止时机,更多相关资料可以联系
子
前端其实只有三种技术:
html,css,js
后端有很多技术:
java,php,python,Ruby(github 就是ruby做的),.net…….
node.js(我们选择的),
凡是能用JS能实现的,最终都会用js实现
其实他们都可以实现相同的功能
node.js是什么?
他不是什么:
· 不是一个语言
· 不是库
· 不是框架
浏览器中的Javascript
ecmascrpt:
· 基本的语法
· if
· var
· funciton
· ….
bom
浏览器对象模型
dom
文档对象模型
node.js中的javascript
没有bom.dom :不处理页面的
在node.js这个运行环境中为javascript提供了一些服务器级别的api
· 文件的读写
网络服务的构建
网络通信
http服务等
….
官网源说明
· Node.js® is a JavaScript runtime(运行时) built on Chrome’s V8 JavaScript engine.(它可以解析执行Js,以前只有浏览器可以解析执行js,可以说是一个运行环境,构建于chrome的V8
· Node.js uses an event-driven(事件驱动), non-blocking(非阻塞,简单来讲就是异步操作) I/O model that makes it lightweight and efficient.
· Node.js’ package ecosystem, npm, is the largest ecosystem of open source libraries in the world. (源自官网)(npm是基于nodejs开发的包管理工具)
绝大多数的javascript包都存放在了npm上,目的是让开发人员更方便的使用
node.js介绍
能做什么?
· web服务器后台
· 命令行工具
npm(基于node开发的)
git(c语言开发的)
hexo
….
对于前端开发工程师来讲,我们接触node 最多的其实是它的命令行工具
自己写的很少,大多是用第三方的
webpack
gulp
npm
hexo
预备知识
简单的命令行操作
cd
dir
is
mkdir
rm
推荐的书籍
《深入浅出node.js》:纯理论,纯底层,可以帮助理解底层(不推新手阶段看)
《node.js权威指南》:API讲解,没有实战,没有业务,偏理论
《node入门》很重要,要看
node.js官方API
node.js中文社区:
《JavaScript 高级编程》第三版
《JavaScript 语言精粹》
能学到啥?
b/s编程模型:
browser-server
back-end
任何服务端技术 B/S 编程模型都是一样的.和语言无管。就只是语言和api不同
模块化编程:
requireJs
SeaJs
以前认知的js只能通过script标签加载,在node中可以像@import一样引用加载JS脚本文件
node.js常用的API
异步编程
回调函数
promise
async
generator
express web 开发框架
ecmascript6
一个新语法而已
安装node环境
重新安装就会覆盖升级
确定node是否安装成功:
cmd->node --version
node 中的JavaScript
1.emcaScript
没有dom 和 bom
2.核心模块
node为JavaScript提供了很多服务器级别的API,这些API绝大多数都被包装到一个具名的核心模块中去了
例如:文件操作的fs模块,http服务构建的http模块,path路径操作模块,os操作系统信息获取……核心模块想要使用需要引用。require就是用来加载模块的
require
require 是一个方法,他的作用就是来加载模块并执行里面代码,在node中,模块有三种
具名的核心模块,例如:fs,http
用户自己编写的:就是自己写的js文件,相对路径必须加./,因为去了之后,node会把路径当做核心模块
require('./b.js')//.js的后缀名可以省略
在node中没有全局作用域,只有模块作用域
不同文件之间不会互相影响,就算调用,外部访问不到内部,内部也访问不到外部
3.第三方模块(也可以是用户自定义模块)
要想访问到, 可以用以下方法:
每个模块(文件)都有一个exports对象,要想让这个文件中的元素被外界访问到,就需要把元素挂在到exports对象中。
require有两个作用:
1.加载模块文件并执行
2.拿到exports这个接口对象
IP和端口号
ip:一台计算机只有一个物理网卡,在同一个局域网中,IP地址必须是唯一的。网卡是通过IP地址来进行定位的。
IP地址用来定位计算机。端口用来定位计算机中的软件。
可以同时开启多个服务,但是一定要确定占用的端口号不一样(计算机中,同一个端口号,同一时间,只能被一个程序占用)
响应内容类型(Concent-Type)
中文乱码问题
在服务器默认发送的数据,UTF8编码的内容,但是浏览器不知道我们是UTF8编码的内容,会按照计算机默认的操作系统去解析(中文操作系统时GBK编码)
解决方法:正确的告诉浏览器,我给你发送的内容是什么编码的
res.setHeader(‘Content-Type’,’text/plain;charset:utf-8’)
要想让浏览器按照一定方式去渲染代码,concent-type应有不同的形式:
text/html,text/plain
后记:对于大部分转行的人来说,找机会把自己的基础知识补齐,边工作边补基础知识,真心很重要。
“我们相信人人都可以成为一个IT大神,现在开始,选择一条阳光大道,助你入门,学习的路上不再迷茫。这里是北京尚学堂,初学者转行到IT行业的聚集地。"
知乎上回答了一个网友的疑惑感觉蛮有意义,对于刚开始接触的前端的人来说,还是需要用一些大白话方便他们去了解前端,降低学习的成本培养对于前端学习的热情。
知乎网友: 我不是读计算机的学生,看W3School自学完了HTML、CSS、JS和JQuery,接下来有什么办法巩固下技术吗?前端学这些对于建站是不是足够了呢?我自己计划还要学习PHP。求高手指导下,谢谢。
针对这个问题的实际情况而言(纯小白)
*请认真填写需求信息,我们会在24小时内与您取得联系。