一、XSS漏洞发现
https://localhost/deals//'onmouseover%3d'prompt%28960807%29'bad%3d' XSS: 发送该URL请求会返回一个alert()弹框
打印接收到的参数、变量
Array
(
[ctl] => deals
[act] =>
['οnmοuseοver='prompt(960807)'bad='] =>
)
https://localhost/deals
Array
(
[ctl] => deals
[act] =>
)
https://localhost/deals/cid-28
Array
(
[ctl] => deals
[act] =>
[cid] => 28
)
二、XSS解决方案:
1.在apache 中开启重写,将注释去除
#LoadModule rewrite_module modules/mod_rewrite.so
LoadModule rewrite_module modules/mod_rewrite.so
2.找到项目目录权限配置AllowOverride None 为All
...
AllowOverride All
...
3.然后修改项目根目录下的.access文件
RewriteEngine On
...
RewriteCond %{QUERY_STRING} [\"\'\<\>]+ [NC]
RewriteRule ^.* [F,L]
4.重启apache,测试xss无效,说明成功
.htaccess相关说明
#如果mode_rewrite.c模块存在 则执行以下指令
RewriteEngine On
#开启rewriteEngine
RewriteCond %{QUERY_STRING} [\"\'\<] [OR]
#RewriteCond TestString CondPattern [flags]
RewriteCond指令定义了一个规则的条件,即,在一个RewriteRule指令之前有一个或多个RewriteCond指令。 条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。RewriteCond就像我们程序中的if语句一样,表示如果符合某个或某几个条件则执行RewriteCond下面紧邻的RewriteRule语句,这就是RewriteCond最原始、基础的功能
TestString是一个纯文本的字符串,但是还可以包含下列可扩展的成分:
RewriteRule反向引用: 引用方法是 $N (0 <= N <= 9) 引用当前(带有若干RewriteCond指令的)RewriteRule中的 与pattern匹配的分组成分(圆括号!)。
RewriteCond反向引用: 引用方法是 %N (1 <= N <= 9) 引用当前若干RewriteCond条件中最后符合的条件中的分组成分(圆括号!)。
RewriteMap 扩展: 引用方法是 ${mapname:key|default}
服务器变量: 引用方法是 %{ NAME_OF_VARIABLE } 这个是我们最常使用到的功能
NAME_OF_VARIABLE具体数值见下表:
HTTP headers:
connection & request:
HTTP_USERAGENT
HTTP_REFERER
QUERY_STRING
CondPattern是条件pattern, 即, 一个应用于当前实例TestString的正则表达式, 即, TestString将会被计算然后与CondPattern匹配.
注意:CondPattern是一个兼容perl的正则表达式, 但是还有若干补充:
Flags标识是是第三个参数,可以用来紧跟下一个条件,这儿用OR表示或者,如果没有[Flags],则用隐含的AND,表示并且。其它的还可以NC等等,表示忽略大小写
RewriteRule ^index\.php$ – [L]
#重写规则
#^index\.php$是匹配正则表达式,只匹配了index.php
RewriteRule . /index.php [L]
#同样是重写规则,代表任意字符,替代为/index.php
#RewriteRule Pattern Substitution [Flags]
Pattern就是参数,一般为一些文件的扩展名,
Substitution是用来替换前面用的,
Flags:
常用的R表示 redirect(强制重定向),
F表示forbidden(禁止访问),
L表示last(最后),通常当你希望停止重写操作而立即重定向时,可用它。
.htaccess中的[NC][R][F][L]几个标记是什么意思
NC: no case,就是说不区分大小写 [NC](no case):表示忽略大小写
R:redirect,重定向 [R](redirect):触发一个显示的跳转,也可以指定跳转类型,如[R=301]
F:forbidden,禁止访问 [F](forbidden):禁止查看特定文件,apache会触发403错误
L:last,表示已经是最后一条规则,.htaccess文件解析即将退出 [L](last):终止一系列的RewriteCond和RewriteRule 这个标记可以阻止当前已被重写的URL为其后继的规则所重写。
qsappend|QSA”(追加查询字符串) 此标记强制重写引擎在已有的替换字符串中追加一个查询字符串,而不是简单的替换。如果需要通过重写规则在请求串中增加信息,就可以使用这个标记。
其它相关介绍
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
#上面两个均为重写条件,%{}中内容为apache定义的一系列返回参数
#RewriteCond指令定义了一个规则的条件,即,在一个RewriteRule指令之前有一个或多个RewriteCond指令。
条件之后的重写规则仅在当前URI与pattern匹配并且符合这些条件的时候才会起作用。
# 防sql注入等恶意请求 Options +FollowSymLinks RewriteEngine On RewriteCond %{QUERY_STRING} (\<|%3C).*script.*(\>|%3E) [NC,OR] RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR] RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2}) RewriteRule ^(.*)$ index.php [F,L]
---------------------
作者:brain_ning
来源:CSDN
原文:https://blog.csdn.net/gongpeng1966/article/details/51132685
版权声明:本文为博主原创文章,转载请附上博文链接!