屏蔽/favicon.ico
时间: 2025-05-11 21:19:36 浏览: 26
### 屏蔽 `/favicon.ico` 请求的方法
为了有效阻止或屏蔽浏览器对 `/favicon.ico` 的请求,可以采用多种方法来实现这一目标。以下是几种常见的解决方案:
#### 方法一:通过服务器端过滤请求
可以在 Web 服务框架中捕获并忽略 `/favicon.ico` 请求。例如,在 Node.js 中可以通过以下方式处理:
```javascript
const http = require('http');
const server = http.createServer((req, res) => {
if (req.url === '/favicon.ico') {
res.writeHead(204);
res.end();
return;
}
// 处理其他请求...
});
server.listen(8080);
```
此代码片段会在检测到 `/favicon.ico` 请求时返回状态码 `204 No Content`,从而避免实际资源加载[^4]。
#### 方法二:Spring MVC 配置排除映射
对于基于 Spring MVC 的 Java 应用程序,可通过配置文件中的 `<mvc:exclude-mapping>` 来排除特定路径的请求。具体如下所示:
```xml
<mvc:exclude-mapping path="/favicon.ico"/>
```
这样能够确保 `/favicon.ico` 不会被拦截器或其他组件处理,进而减少不必要的开销[^1]。
#### 方法三:前端显式定义 favicon 路径
如果希望完全控制 favicon 行为而不依赖于默认行为,则可在 HTML 文件头部手动指定 favicon 地址。即使该地址指向一个不存在或者空白图片也不会触发额外错误提示:
```html
<link rel="icon" href="data:,">
```
上述做法利用了 data URI scheme 创建了一个透明像素作为占位符,既满足了标准又不会真正下载任何东西[^3]。
#### 方法四:Vue 构建工具链调整
针对 Vue CLI 构建的应用,默认情况下可能会自动生成某些静态资产链接(包括可能存在的 favicon)。因此建议检查 public/index.html 是否存在相关声明;如果没有必要保留此项功能的话可以直接移除对应部分即可达到目的[^2]。
综上所述,以上四种策略都可以有效地应对不同场景下的需求以消除多余的 `/favicon.ico` 查询现象。
阅读全文
相关推荐














<!doctype html>
<!DOCTYPE html><html><head><meta charset="utf-8">
<meta name="Author" content="Noah">
<meta name="Keywords" content="">
<meta name="Description" content="">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>BA综合发布页</title>
<meta name="keywords" content="欢迎使用BA综合">
<meta name="description" content="欢迎使用BA综合">
<style>@font-face{font-family:iconfont;src:url(//at.alicdn.com/t/font_1706200_3sgw4esvyq9.eot?t=1584846914425);src:url(//at.alicdn.com/t/font_1706200_3sgw4esvyq9.eot?t=1584846914425#iefix) format('embedded-opentype'),url('data:application/x-font-woff2;charset=utf-8;base64,d09GMgABAAAAAAPcAAsAAAAACEAAAAOQAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHEIGVgCDMgqDVIMaATYCJAMUCwwABCAFhG0HUhswBxEVnPHIfiZkcgn7O+8oo66bEbK2OpSJxjfBA+X1vslMtll8iBW0KuzdSry1J/JGpwASAA0EaO7O95urXT4WOkKV5Nojj7b4hwrpy2SO/v97p78xLfvYuvYslzWHLex8DDAOpEDHnGQljg3TC+cUPEjbIQAHqRRD1GvQzI2BgvQTgBjYr083jJQNVcMRGEZbyVSVKhajY2hztCvAIv178YYywgANXUJ2atW7fk9qmZi1ZMCSjnILC8fbDUAHJFAMUCCGl/oGIm2uGBKHP1RRC3BgoKGZmLxVUbOWZcWqHRkc9A8PBBKFBsIGKXUBUAvlFZhwBAGmhiDBLIqgwKyVRwPuKwAOWAjCWUxL9mpIWOWKcikVmuwiF0+49sx9/bnn5gvfDdO/at6eQHTP5dHLd8Z6V67btSPG061Q523w0S5OzYETx4QbT9zXbnmuP/bdvOsL9lwR2D031utePndvMM7nXRncNy/G4xvlEveE69fc4Tdu+AbcnOdxa4E98/bFyZV75+5WxGRRnfY0cEulpaqbVCzNtxTEU1P1m2J4tFGwJ7VcytpevcrWOXd44oCjAyZu3DXRvQxryi09PV2/BcVQIlRxZPWvAFhMXkb1qQ3bHPFvOVXxWI1TjTLPFjtT5smFsAtxVqK82CcvekwcsbMOHDh4wOBxYw4eZI+NVR+A6Vmx4bGz1ZI0XFw1r0mlXm20lW5RpWd+s0u/ijYZwarmHJsZVi+tXKjMlU2rm186Hlk6tFxaPfwAWLPk3380K2u4Qm6xtmaprTL4b/dj0Nu/F+qwat8MpwLgzvpfdbSsPbbVBj9Ijy//kxa1tAb7qAqUxK4rT8490qpVpxGATiESBDT4aTX/LxTJg3H0MbPIZMAgJgaNIqSAxCCbpGjFQMdJObBhUBMcFKXhbCdRDEcilB0oZAYAQTiHQCOU4yAJ5ypJ0e6DTizvwEa4kODAK6KWdJIrLP1uHgWtYqDuj3zPi2FOvTHlb7BpaiWp1NwvSPRJKrMiW3zFAhljRPy2laohIzzTC9gN08S0Cgf0mjnV9ZLnpuxDWc/z5oZHQasYqPsj3/NiZGO9yX3/DTZNrdQQ+qJfkOjbpzIrWpBedUsrwrXcEr9tpWrICM/0AjyYaI5pLe8U0GvmemTWS47qmba6bH7D/IybAAdkZV1oQgoldGHjYViCYPl3WKxb86g+On/sE/+kc/CLtS1vNg==') format('woff2'),url(//at.alicdn.com/t/font_1706200_3sgw4esvyq9.woff?t=1584846914425) format('woff'),url(//at.alicdn.com/t/font_1706200_3sgw4esvyq9.ttf?t=1584846914425) format('truetype'),url(//at.alicdn.com/t/font_1706200_3sgw4esvyq9.svg?t=1584846914425#iconfont) format('svg')}.iconfont{font-family:iconfont!important;font-size:16px;font-style:normal;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.icon-querenzhengque:before{content:"\e600"}.icon-tishi:before{content:"\e640"}.icon-cuowu:before{content:"\e602"}.icon-jinggao:before{content:"\e62b"}*{box-sizing:border-box;margin:0;padding:0;font-weight:300}body,body ::-webkit-input-placeholder{font-family:Source Sans Pro,sans-serif;color:#fff;font-weight:300}body :-moz-placeholder,body ::-moz-placeholder{font-family:Source Sans Pro,sans-serif;color:#fff;opacity:1;font-weight:300}body :-ms-input-placeholder{font-family:Source Sans Pro,sans-serif;color:#fff;font-weight:300}a{text-decoration:none}.wrapper{background: #01a982; background: linear-gradient(to bottom right,#01a982 0,#60ae80 100%); overflow: hidden;}.bg-bubbles,.wrapper{position:absolute;left:0;width:100%;height:100%}.bg-bubbles{top:0;z-index:1}.bg-bubbles li{position:absolute;list-style:none;display:block;width:40px;height:40px;background-color:hsla(0,0%,100%,.15);bottom:-160px;animation:square 25s infinite;transition-timing-function:linear}.bg-bubbles li:nth-child(1){left:10%}.bg-bubbles li:nth-child(2){left:20%;width:80px;height:80px;animation-delay:2s;animation-duration:17s}.bg-bubbles li:nth-child(3){left:25%;animation-delay:4s}.bg-bubbles li:nth-child(4){left:40%;width:60px;height:60px;animation-duration:22s;background-color:hsla(0,0%,100%,.25)}.bg-bubbles li:nth-child(5){left:70%}.bg-bubbles li:nth-child(6){left:80%;width:120px;height:120px;animation-delay:3s;background-color:hsla(0,0%,100%,.2)}.bg-bubbles li:nth-child(7){left:32%;width:160px;height:160px;animation-delay:7s}.bg-bubbles li:nth-child(8){left:55%;width:20px;height:20px;animation-delay:15s;animation-duration:40s}.bg-bubbles li:nth-child(9){left:25%;width:10px;height:10px;animation-delay:2s;animation-duration:40s;background-color:hsla(0,0%,100%,.3)}.bg-bubbles li:nth-child(10){left:90%;width:160px;height:160px;animation-delay:11s}@keyframes square{0%{transform:translatey(0)}to{transform:translatey(-700px) rotate(600deg)}}@media (max-width:500px){.container h1{font-size:60px}form button,form input{width:500px}}.main{padding:50px 0;z-index:999;position:relative}.main h1{font-size:40px;text-align:center;color:#fff;margin-bottom:30px;text-transform:uppercase}.content{margin:0 auto;width:28%;background:#fff;border-radius:5px}p.footer{font-size:16px;text-align:center;color:#fff;font-weight:500;margin-top:30px}p.footer a{color:#55acee}p.footer a:hover{color:#000;transition:.5s all;-webkit-transition:.5s all;-moz-transition:.5s all;-o-transition:.5s all;-ms-transition:.5s all}.content-top h2{font-size:22px;color:#fff;text-align:center;background:#02a982;padding:12px 0;border-radius:5px}.content-top p{text-align:center;font-size:16px;color:#000;margin-top:15px}.content-top ul li{display:block;font-size:15px;color:#000;line-height:1.8em;padding:1em 0 1em 1em;border-bottom:1px solid #e2e0de}.content-top ul li a{color:#000;font-weight:400}.content-top ul li a i{color:#02a982;font-style:normal;display:block;margin:2px 0}.content-top ul li span{display:block;color:#999}.content-top{padding:1.5em}.content-top p a{color:#55acee;margin-left:5px}@media (max-width:1366px){.content{width:31%}}@media (max-width:1280px){.content{width:32%}}@media (max-width:1080px){.content{width:38%}.main h1{font-size:36px}.content-top h2{font-size:20px;padding:10px 0}.content-top p,.content-top ul li,p.footer{font-size:14px}}@media (max-width:800px){.main h1{font-size:34px}.content{width:46%}}@media (max-width:768px){.main{padding:90px 0}.main h1{margin-bottom:55px}p.footer{margin-top:75px}}@media (max-width:736px){.main{padding:70px 0}.main h1{margin-bottom:45px}.content{width:53%}p.footer{margin-top:50px}}@media (max-width:667px){.main h1{font-size:32px;margin-bottom:35px}.main{padding:60px 0}.content{width:57%}.content-top h2{font-size:18px}}@media (max-width:600px){.main h1{font-size:30px}.content-top{padding:1em}.content{width:62%}}@media (max-width:568px){.content{width:68%}}@media (max-width:480px){.content{width:78%}.main h1{font-size:28px}p.footer{margin-top:42px}}@media (max-width:414px){.content-top h2{font-size:16px}.content{width:85%}.main{padding:50px 0}p.footer{line-height:1.8em;margin:42px auto 0;width:85%}}@media (max-width:384px){.main h1{font-size:27px}.content,p.footer{width:90%}p.footer{margin:32px auto 0}}@media (max-width:375px){.main h1{font-size:26px;margin-bottom:25px}.main{padding:45px 0}.content,p.footer{width:92%}.content-top h2{padding:8px 0}}@media (max-width:320px){.main h1{font-size:24px;margin-bottom:30px}.content-top ul li{padding:1em 0 1em 1em;background-size:13%!important}.content-top{padding:1.2em}.content-top p,.content-top ul li,p.footer{font-size:13px}.content,p.footer{width:90%}}@media(max-width:500px){.bg-bubbles, .wrapper{height:auto;}}</style>
</head>
<body>
BA综合发布页
请 Ctrl+D 收藏本页到浏览器收藏夹
授权查询
http://bamxys.kvlzv.top/query.php
使用卡密
http://bamxys.kvlzv.top//auth.php
代理登录
http://bamxys.kvlzv.top/admin
自助购买
https://fk.jiuykj.com/shop/RXTool
BA系列插件插件下载
https://www.123912.com/s/ZFvDVv-5K8Sv
近期部分国产浏览器屏蔽网址,电脑请安装chrome浏览器访问,手机请安装X浏览器访问。
© 2025 BA综合发布页. All Rights Reserved
<script type="text/javascript" src="https://v1.cnzz.com/z_stat.php?id=1279597563&web_id=1279597563"></script>
</body></html>
请你给这段代码页脚加一个网站已运行


之前我配置了libinjection.so到防火墙上,现在修改我发给你的代码,将modsecurity配置到防火墙上
app.py:
from flask import Flask, request, jsonify
import ctypes
import numpy as np
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing.sequence import pad_sequences
import pickle
import json
from urllib.parse import unquote
import html
import sys
import base64
import re
from utils.makelog import log_detection
import os
import logging
from logging.handlers import RotatingFileHandler
os.environ['TF_KERAS'] = '1'
os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2' # 1=警告,2=错误,3=静默
os.environ['TF_ENABLE_ONEDNN_OPTS'] = '0' # 关闭 oneDNN 提示
app = Flask(__name__)
log_dir = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'utils')
os.makedirs(log_dir, exist_ok=True)
# 配置文件日志处理器(10MB轮换,保留10个备份)
file_handler = RotatingFileHandler(
os.path.join(log_dir, 'app.log'),
maxBytes=10*1024*1024,
backupCount=10
)
file_handler.setFormatter(logging.Formatter(
'%(asctime)s - %(name)s - %(levelname)s - %(message)s'
))
# 设置日志级别(DEBUG/INFO/WARNING/ERROR/CRITICAL)
app.logger.setLevel(logging.INFO)
file_handler.setLevel(logging.INFO)
app.logger.addHandler(file_handler)
# --- 加载 libinjection ---
try:
libinjection = ctypes.CDLL('/usr/local/lib/libinjection.so', mode=ctypes.RTLD_GLOBAL)
libinjection.libinjection_sqli.argtypes = [
ctypes.c_char_p,
ctypes.c_size_t,
ctypes.c_char_p,
ctypes.c_size_t
]
libinjection.libinjection_sqli.restype = ctypes.c_int
app.logger.info("Libinjection 加载成功")
print("Libinjection 加载成功(控制台输出)")
except Exception as e:
app.logger.error(f"Libinjection 加载失败: {str(e)}", exc_info=True)
exit(1)
# --- 解码辅助函数 ---
def try_base64_decode(s):
try:
if len(s) % 4 != 0:
return s
decoded = base64.b64decode(s).decode('utf-8', errors='ignore')
if all(32 <= ord(c) <= 126 or c in '\t\r\n' for c in decoded):
return decoded
return s
except Exception:
return s
def deep_url_decode(s, max_depth=3):
decoded = s
for _ in range(max_depth):
new_decoded = unquote(decoded)
if new_decoded == decoded:
break
decoded = new_decoded
return decoded
# --- 提取 HTTP 请求中的潜在 SQL 内容 ---
def extract_sql_candidates(data):
candidates = []
def extract_strings(obj):
EXCLUDED_KEYS = {'uri', 'path', 'security', 'PHPSESSID', 'session_id','Login', 'login', 'submit', 'Submit'}
STATIC_RESOURCES = {'.css', '.js', '.png', '.jpg', '.jpeg', '.gif', '.ico', '.woff', '.woff2'}
if isinstance(obj, dict):
for key, value in obj.items():
if key in EXCLUDED_KEYS:
continue
# 检查值是否为静态资源(无需检测)
if isinstance(value, str) and any(ext in value.lower() for ext in STATIC_RESOURCES):
continue
extract_strings(value) # 递归调用,仅传递值
elif isinstance(obj, list):
for item in obj:
extract_strings(item)
elif isinstance(obj, str):
text = obj
# 多层 URL 解码
text = deep_url_decode(text)
# HTML 实体解码
text = html.unescape(text)
# Unicode 转义解码
try:
text = text.encode().decode('unicode_escape')
except Exception:
pass
# Base64 解码
text = try_base64_decode(text)
if len(text) < 1000:
candidates.append(text)
extract_strings(data)
return candidates
# --- 检测逻辑 ---
def detect_one(query):
if re.match(r'^\/.*\.(php|html|js)$', query):
return {
"检测结果": "正常",
"检测方式": "URI过滤",
"可信度": 1.0
}
result_buf = ctypes.create_string_buffer(8)
is_libi_sqli = libinjection.libinjection_sqli(query.encode('utf-8'), len(query),result_buf,ctypes.sizeof(result_buf))
if is_libi_sqli:
return {
"检测结果": "存在SQL注入",
"检测方式": "Libinjection",
}
else:
return {
"检测结果": "正常",
"检测方式": "Libinjection",
}
@app.route('/')
def home():
return "SQL 注入检测系统已启动"
@app.route('/detect', methods=['POST'])
def detect():
app.logger.info(f"接收到请求: {request.json}")
try:
data = request.get_json()
if not data:
return jsonify({"error": "缺少 JSON 请求体"}), 400
ip = request.remote_addr
candidates = extract_sql_candidates(data)
results = []
for query in candidates:
result = detect_one(query)
log_detection(ip, query, result)
results.append(result)
return jsonify({"detections": results})
except Exception as e:
return jsonify({"error": f"检测过程中发生错误: {str(e)}"}), 500
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, debug=True)
nainx.conf:
# 全局作用域(仅保留一份)
user user;
worker_processes 1;
events {
worker_connections 1024;
}
http {
lua_package_path "/usr/local/openresty/lualib/?.lua;;";
include mime.types;
default_type text/html;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name 10.18.47.200;
location /dvwa {
rewrite_by_lua_file /usr/local/openresty/lualib/parse.lua;
proxy_pass http://192.168.159.100/DVWA-master/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_redirect http://10.18.47.200/DVWA-master/ http://10.18.47.200/dvwa/;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
charset utf-8;
}
#屏蔽图标
location = /favicon.ico {
access_log off;
log_not_found off;
}
}
}
parse.lua:
local cjson = require "cjson.safe"
local http = require "resty.http"
-- 1) 解析 Nginx 内置变量和 Headers
local method = ngx.req.get_method()
local uri = ngx.var.request_uri
local headers = {
user_agent = ngx.var.http_user_agent or "",
cookie = ngx.var.http_cookie or "",
host = ngx.var.http_host or "",
content_type = ngx.var.http_content_type or ""
}
-- 2) 解析 GET 参数
ngx.req.read_body() -- 必须先读取 body,否则取不到 POST
local args = ngx.req.get_uri_args()
local query_params = {}
for k, v in pairs(args) do
query_params[k] = v
end
-- 3) 解析 POST 数据: 根据 content_type 判断JSON或表单
local post_data = {}
if headers.content_type and string.find(headers.content_type, "application/json") then
local body_data = ngx.req.get_body_data()
if body_data then
local json_data = cjson.decode(body_data)
if json_data then
post_data = json_data
else
ngx.log(ngx.ERR, "JSON 解析失败")
end
end
else
local post_args = ngx.req.get_post_args()
for k, v in pairs(post_args) do
post_data[k] = v
end
end
-- 4) 整合请求数据并日志输出
local request_data = {
method = method,
uri = uri,
headers = headers,
query_params = query_params,
post_data = post_data,
client_ip = ngx.var.remote_addr
}
ngx.log(ngx.ERR, "OpenResty 解析的数据: " .. cjson.encode(request_data))
-- 5) 调用 Flask WAF 后端
local httpc = http.new()
local res, err = httpc:request_uri("http://127.0.0.1:5000/detect", {
method = "POST",
body = cjson.encode(request_data),
headers = {
["Content-Type"] = "application/json"
}
})
if not res then
ngx.log(ngx.ERR, "Flask WAF 请求失败: ", err)
ngx.status = 500
ngx.header["Content-Type"] = "text/html; charset=utf-8"
ngx.say("WAF 检测异常")
return ngx.exit(500)
end
-- 6) 复用连接
local ok, err_keep = httpc:set_keepalive(60000, 100)
if not ok then
ngx.log(ngx.ERR, "设置 keepalive 失败: ", err_keep)
end
ngx.log(ngx.ERR, "Flask 返回: ", res.body)
-- 7) 解析Flask响应并处理(修正pcall返回值)
if res.status ~= 200 then
ngx.log(ngx.ERR, "Flask 返回非200状态码: ", res.status)
ngx.status = 500
ngx.header["Content-Type"] = "text/html; charset=utf-8"
ngx.say("Flask 服务异常")
return ngx.exit(500)
end
local success, decoded_data = pcall(cjson.decode, res.body)
if not success then
ngx.log(ngx.ERR, "Flask 响应JSON解析失败: ", decoded_data)
ngx.status = 500
ngx.header["Content-Type"] = "text/html; charset=utf-8"
ngx.say("WAF 响应格式错误")
return ngx.exit(500)
end
local waf_result = decoded_data
-- 8) 判断是否存在SQL注入(根据app.py的响应结构)
local is_sqli = false
local detections = waf_result.detections or {}
for i = 1, #detections do
local detection = detections[i]
-- 检查检测结果是否为表类型且包含检测结果字段
if type(detection) == "table" and detection["检测结果"] then
if detection["检测结果"] == "存在SQL注入" then
is_sqli = true
break
end
end
end
-- for _, detection in ipairs(waf_result.detections or {}) do
-- if detection["检测结果"] == "存在SQL注入" then
-- is_sqli = true
-- break
-- end
-- end
-- 9) 根据检测结果决定是否拦截
if is_sqli then
ngx.log(ngx.ERR, "WAF阻断 SQL注入")
ngx.status = ngx.HTTP_FORBIDDEN
ngx.header["Content-Type"] = "text/html; charset=utf-8"
ngx.say([[
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="utf-8"/>
<title>访问受限</title>
<style>
/* 全局样式重置 */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #000;
color: #fff;
font-family: "Microsoft YaHei", Arial, sans-serif;
}
.container {
width: 90%;
max-width: 600px;
padding: 40px;
text-align: center;
border: 1px solid rgba(255, 255, 255, 0.1);
border-radius: 8px;
background: rgba(10, 10, 10, 0.8);
backdrop-filter: blur(5px);
box-shadow: 0 0 15px rgba(255, 255, 255, 0.05);
}
h1 {
margin-bottom: 20px;
font-size: 2.5rem;
letter-spacing: 2px;
color: #fff;
text-shadow: 0 0 10px rgba(0, 255, 255, 0.5);
}
p {
margin-bottom: 30px;
font-size: 1.1rem;
line-height: 1.8;
color: rgba(255, 255, 255, 0.9);
}
.btn-back {
display: inline-block;
padding: 12px 30px;
background: transparent;
color: #00ffcc;
border: 1px solid #00ffcc;
border-radius: 4px;
font-size: 1rem;
font-weight: bold;
text-decoration: none;
transition: all 0.3s ease;
cursor: pointer;
}
.btn-back:hover {
background: rgba(0, 255, 204, 0.1);
box-shadow: 0 0 15px rgba(0, 255, 204, 0.3);
transform: translateY(-2px);
}
</style>
</head>
<body>
访问受限
检测到疑似SQL注入/跨站脚本攻击(XXS)的恶意行为特征,
为保障系统安全,本次请求未被授权执行
返回上一页
<script>
// 点击按钮返回前一个页面状态
document.getElementById('backBtn').addEventListener('click', function() {
history.back();
});
</script>
</body>
]])
else
ngx.log(ngx.ERR, "WAF 判断正常,放行请求")
return -- 关键:放行请求,继续执行proxy_pass
end


