一、前端 XSS
XSS
,全称为Cross Site Scripting
,跨站脚本攻击。XSS
攻击原理是 程序 + 数据 = 结果。Scripting
是可以获取页面数据、获取Cookies
、劫持前端逻辑、发送请求,所以就可以偷取网站任意数据、偷取用户资料、偷取用户密码和登录态、欺骗用户等等。XSS
攻击分类为反射型和存储型。反射型是url
参数直接注入,存储型是存储到DB
后读取时注入。XSS
攻击注入点是有HTML
节点内容、HTML
属性、JavaScript
代码和富文本等。- 浏览器自带防御,参数出现在
HTML
内容或属性。对于JavaScript
代码,转义'\'
或者转换成json
。 - 富文本,按白名单保留部分标签和属性,也可以使用
js-xss
这个第三方库。 CSP
,全称为Content Security Policy
,内容安全策略,用于指定哪些内容可执行。PHP
中防御XSS
,可以使用内置函数转义、DOM
解析白名单、第三方库和CSP
等等。
二、前端 CSRF
CSRF
,全称为Cross Site Request Forgy
,跨站请求伪造。CSRF
攻击原理,用户登录A
网站,A
网站确认身份,B
网站页面带A
网站身份向A
网站发起请求。CSRF
攻击的危害是利用用户登录态、用户不知情、完成业务请求,所以盗取用户资金进行转账和消费、冒充用户发帖背锅、损害网站名誉等等。CSRF
攻击防御,B
网站向A
网站请求,带A
网站Cookies
,不访问A
网站前端,访问后端,referer
为B
网站。对此,需要禁止第三方网站带Cookies
,以及需要设置same-site
属性。- 对于不访问
A
网站前端,可以在前端页面加入验证信息、验证码和token
等等。 - 对于
referer
为B
网站,可以验证referer
和 禁止来自第三方网站的请求。 PHP
防御CSRF
,可以使用Cookie samesite
属性、HTTP referer
头 和token
。
三、前端 Cookies
Cookies
的特性是前端数据存储,后端通过http
头设置,请求时通过http
头传给后端,前端可读写和遵守同源策略。同时,也是有域名、有效期、路径、http-only
和secure
。Cookies
的作用是存储个性化设置,存储未登录时用户唯一标识,存储已登录用户的凭证和存储其它业务数据。Cookies
的登录用户凭证是前端提交用户名和密码,后端验证用户名和密码,后端通过http
头设置用户凭证。对此,登录用户凭证可以是用户ID
、用户ID
+签名 和SessionId
。Cookies
和XSS
的关系,XSS
可能偷取Cookies
,http-only
的Cookie
不会被偷。Cookies
和CSRF
的关系,CSRF
利用了用户Cookies
,攻击站点无法读取Cookies
,最好能阻止第三方使用Cookies
。Cookies
安全案例,比如某学习教务系统使用了开源CMS
,该CMS
使用username
作为唯一用户标识,该CMS
文章作者暴露了username
,可以使用任意username
登录后台。还比如,某论坛使用了某开源ASP BBS
程序,该ASP
程序使用用户ID
作为用户标识,可以伪造任意用户登录。Cookies
安全策略是签名防篡改、私有变化加密、http-only
去防止XSS
、secure
和same-site
。
四、点击劫持
- 点击劫持的危害是用户亲手操作、用户不知情,所以就盗取用户资金转账、获取用户敏感信息。
- 点击劫持防御,可以使用
JavaScript
禁止内嵌,X-FRAME-OPTIONS
禁止内嵌以及其他辅助手段等。