一、XSS
acunetix扫描的漏洞中有 Cross site scripting (content-sniffing) 跨站点脚本(内容嗅探)就是在入参放入攻击脚本,然后后端没有处理,把这段脚本直接返回给前端,前端如果直接使用可能会有风险!
所以后端不能直接将前端给的数据直接返回前端,错误信息需要处理。
比如登录名错误,不能返回登录名,可以提示登录名错误。如果把登录名直接返回就有风险。
像下面这样:
{
"errorCode": "xxx",
"data": {
"userName": "xxx‘攻击脚本’"
}
}
}
修改后
{
"errorCode": "xxx",
"data": {
"userName": "xxx提示错误信息,不把前端输入的信息直接返回"
}
}
}
二、CSOR
跨域的问题很复杂牵扯很多东西,但是这里扫描的漏洞处理起来简单些。
意思:因为任意域名都可以访问获取资源,不安全,需要只允许指定的域名访问。
这个可以通过修改nginx配置来处理。
map $http_origin $allow_cros {
"~^(https?://(origin.com)?)$" 1;
"~*" 0;
}
map 的主要作用是创建自定义变量,通过使用 nginx 的内置变量,去匹配某些特定规则,如果匹配成功则设置某个值给自定义变量。 而这个自定义变量又可以作于他用。
这里,定义了变量 $allow_cros ,当nginx的内置变量,$http_origin,符合正则表达式 ~^(https?://(origin.com)?)$ 即 origin 是https://origin.com的域名 则$allow_cros变量值为1,否则 为0
if ($allow_cros = 0){
return 403;
}
这里,判断,当$allow_cros为0即origin的值不是指定的域名,返回403禁止访问。
完整demo
http {
include mime.types;
default_type application/octet-stream;
#log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"';
#access_log logs/access.log main;
sendfile on;
#tcp_nopush on;
#keepalive_timeout 0;
keepalive_timeout 65;
#gzip on;
map $http_origin $allow_cros {
"~^(http?://(dmp.xxxxxx.cn)?)$" 1;
"~^\s" 1;
"~*" 0;
}
server {
listen 80;
server_name localhost;
if ($allow_cros = 0){
return 403;
}
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
proxy_pass http://192.168.10.105;
}
}
}
map是在http里,不在server里,而判断则可以在server或location里。
其它问题:
页面错误信息漏洞,应用程序错误消息漏洞
这两个类似,页面错误信息指输入错误信息导致后端返回异常的错误信息。只要后端再验证输入时严格限制数据类型和格式,只要不符合格式就返回提示报错信息就可以。
应用程序错误消息漏洞是接口因为其它原因返回的错误信息中可能有不正常信息。所以保证正常情况下不返回异常信息(500 服务器错误的异常信息)就可以。
目录列表漏洞
这个是挂载的文件服务器目录权限问题,在nginx里注释掉 autoindex: on 就可以了。
location /getfiles/ {
#autoindex on;
autoindex_exact_size off;
autoindex_localtime on;
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Credentials true;
}
参考博客: