php安全之XSS
XSS,全称Cross Site Scripting,即跨站脚本攻击,从某种意义上来讲也是一种注入攻击,详细指攻击者在页面中注入恶意的脚本代码,当受害者访问该页面时,恶意代码会在其浏览器上实行,须要强调的是,XSS不仅仅限于JavaScript,还包括flash等其它脚本措辞。根据恶意代码是否存储在做事器中,XSS可以分为存储型的XSS与反射型的XSS。
什么是反射型XSS攻击,在这里分四个安全级别的代码进行解释:
1、低安全级别
<?php//做事器端代码:if(isset($_GET['username'])){//todo业务代码echo'Hello'.$_GET['username'];}
上面代码直策应用了$_GET['username']参数,并没有做任何的过滤与检讨,存在明显的xss漏洞。
漏洞利用:
输入<script>alert(/xss/)</script>后,成功弹窗。
低安全级别
2、中等安全级别
<?php//做事器端代码if(isset($_GET['username'])){//todo业务代码$username=str_replace('<script>','',$_GET['username']);echo\"大众Hello${username}\公众;}
上面的代码对输入进行了过滤,基于黑名单的思想,利用str_replace函数将输入中的<script>标签更换为空,但是这种防御机制很随意马虎轻松绕过。
漏洞利用:
输入<sc<script>ript>alert(/xss/)</script>,会成功弹框。
输入<ScRipt>alert(/xss/)</script>,也会成功弹框。
中等安全级别防御
3、高安全级别
<?php//做事器端代码if(isset($_GET['username'])){//todo业务代码$name=preg_replace('/<(.)s(.)c(.)r(.)i(.)p(.)t/i','',$_GET['username']);echo\"大众Hello${username}\"大众;}
上面的代码同样利用黑名单过滤输入,利用正则表达式函数对干系黑名单字符进行更换空,这种防御机制虽然可以有效过滤掉2中两种漏洞利用,但仍旧可以进行攻击。
漏洞利用:
虽然无法利用<script>标签注入攻击代码,但是可以通过img、body等标签的事宜或iframe等标签的src注入恶意javascript代码。如输入:<img src=1 onerror=alert(/xss/)>,会成功弹窗。
高安全级别
4、非常高安全级别(impossible)
<?php//做事器端代码if(isset($_GET['username'])){//todo业务代码//利用htmlspecialchars函数过滤$name=htmlspecialchars($_GET['username']);echo\"大众Hello${username}\公众;}
上面的代码利用PHP供应的函数htmlspecialchars把预定义的字符转为HTML实体,防止浏览器将其作为HTML元素解析。到这个级别已经可以达到大多数系统的哀求了,当然也可以自己写方法进行xss攻击防御。
写代码,不仅要知道怎么写,还该当知道为什么这么写,举一反三,多思考,才能在往后的技能道路上越走越远。
php安全篇
我是一名从传统制造业转行过来的码农,现已在it行业事情快3年,自我觉得转行成功,虽然跟科班出身的同事比较根本差了些,但是我也在不断努力提升自己,希望自己变的越来越好。如果喜好我的文章,欢迎转发~~ 关注我,后续更精彩哦~~