整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

PHP+Html 防止XSS跨站脚本攻击 目前最主流的策略

里主要是介绍下防止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。求高手指导下,谢谢。

针对这个问题的实际情况而言(纯小白)

  • css 是主要处理样式的,学完基础的css 可以扩展性学习下预编译语言 less sass 这些 主流的应付一般的小项目搓搓有余了
  • html 是页面布局 初级阶段 其实你只要掌握有哪些标签,能写出有语意话的页面元素,稍稍进一步你可以找一些企业官网试一下看能不能写出来,能把一个psd设计稿转化成页面就达到基本的小要求了。
  • javascript 是动态脚本语言,负责页面交互,这部分对于初学而言难度是比较大的,仅针对纯小白而言先学会js基础语法,理解指针,原型,实操dom 0级事件 dom 2级事件,熟练掌握函数调用和参数调用,再稍微进一步可以学习下,如何导入导出模块,进行复用。
  • php其实没必要学了,个人看法。学php倒不如花点时间稍微了解下数据库mysql 学会 增删改查即可,最基本的语法懂就够了。
  • 如果只是纯兴趣学习,这些是够了,但是如果是为了工作的话 vue /react 必需会一个。
  • 至于建站的话,简单的话花点小钱买个阿里云服务器懂得界面操作就好了 稍微体验下即可。版本发布学习成本是比较大的不适合新手,在此不建议现阶段掌握这些。