博客 (137)

今天遇到一个向基于 .NET Framework 框架开发的 Web 网站 POST 数据响应 405 Method Not Allowed 的问题。

服务端接口地址是 https://***/api/abc/Default.aspx,

若请求 https://***/api/abc/Default.aspx 或 https://***/api/abc/ 则正常 ,

若请求 https://***/api/abc 就会出现这个问题。

原因可能是服务器可能返回 301 重定向到 https://***/api/abc/Default.aspx,

导致最终接口接受到的请求方法不是 POST 。

xoyozo 半个月前
94

查询路径:阿里云控制台 - 费用与成本 - 订购订单 - 企业服务产品订单

查询网址:https://billing-cost.console.aliyun.com/order/list/enterprise/paid

xoyozo 半个月前
80

安装 PyPI(包/库/组件)

pip install 包名

如果安装失败,尝试用国内镜像

pip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple

如果不想每次都加 -i 参数,可以更改全局配置

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple


查看所有配置

pip config list


查看 python 文件路径

# Windows 或 Linux 通用
python -c "import sys; print(sys.executable)"

默认路径为:C:\Users\<user name>\AppData\Local\Programs\Python\Python<version>\python.exe


常用组件介绍

包名介绍
Flask一款基于 Python 的轻量级 Web 开发框架
Django一款基于 Python 的重量级 Web 开发框架
Pandas一个数据分析包,提供 Series、Time-Series、DataFrame、Panel、Panel4D、PanelND 等数据结构


更多

xoyozo 6 个月前
766
  1. 一般地,在路由器上启用 UPnP 就可以了。

  2. 如果局域网中有多台监控设备,或有多层局域网,可以尝试直接端口映射。

  3. 在监控控制面板中查看主机 IP(注意不是各通道的 IP),或者在同一层局域网通过电脑浏览器中访问监控控制面板(http://主机ip)。

  4. 然后就可以在路由器上配置端口映射了(有些路由器的菜单项为“NAT 服务”)。

  5. 一般配置 554(RTSP 端口)和 8000(服务端口)就可以了,80(HTTP 端口)和 443(HTTPS 端口)用于通过浏览器管理监控系统,不需要在外网配置的话不需要映射,暴露在公网有安全风险。另外 9010(平台命令端口)和 9020(平台数据端口)作用未知,可不映射。

  6. 当然,为了防止端口冲突或提高安全性,映射的外部端口和内部端口可以不相同。

xoyozo 9 个月前
1,616

本文介绍 Token 认证和 HMAC 认证两种方式。


一、Token 接口认证方式

原理:

客户端使用账号密码等信息登录,服务器验证通过后生成一个 Token 发送给客户端。客户端在后续的请求中携带这个 Token,服务器通过验证 Token 来确认用户的身份和权限。

应用场景:移动应用、Web 应用(特别是 SPA)

优点:

无状态性,即服务器不需要存储用户的会话信息。

易于实现跨域认证。

缺点:

Token 可能被窃取,应使用 HTTPS、不暴露在 URL 中、使用 HttpOnly 的 Cookie、对 Session ID 进行验证、设置合理过期时间、对 Token 进行加密等措施加强防范。


二、HMAC 接口认证方式

原理:

客户端将消息M与密钥K连接起来,通过哈希函数计算得到 HMAC 值,发送给服务器。服务器收到请求后,使用相同的密钥和请求参数重新计算 HMAC 值,如果与客户端发送的签名一致,即是合法请求。

优点:

安全性较高,攻击者很难伪造 HMAC 值,截获并篡改数据也无法通过服务端验证。

计算效率较高,哈希函数(如 MD5、SHA-1、SHA-256 等)计算效率比较高。

缺点:

密钥的更新和管理比较麻烦。


扩展:

在消息体中添加时间戳以防止重放攻击。

加密隐私数据:可以使用对称加密算法(如 AES)或非对称加密算法(如 RSA、ECC 等)对部分隐私数据进行加密。非对称算法虽然更安全,但速度较慢,如需加密大量数据,可以考虑使用对称加密算法进行加密,然后使用非对称加密算法对对称密钥进行加密。

xoyozo 10 个月前
1,271
  1. 国家智慧教育公共服务平台 https://gjzwfw.www.gov.cn/

  2. 中国裁判文书网 https://wenshu.court.gov.cn/

  3. 国家企业信用信息公示系统 https://gs.gsxt.gov.cn/

  4. 国家社会保险服务平台 https://si.12333.gov.cn/

  5. 天地图 https://www.tianditu.gov.cn/

  6. 国家统计局 https://www.stats.gov.cn/

  7. 中国商标网 https://sbj.cnipa.gov.cn/sbj/

  8. 国家法律法规数据库 https://flk.npc.gov.cn/

  9. 中国专利公布公告网 http://epub.cnipa.gov.cn/

  10. 国家标准全文公开系统 https://openstd.samr.gov.cn/bzgk/gb/

  11. 国家药品监督管理局 https://www.nmpa.gov.cn/datasearch/

  12. 食品安全抽检公布结果查询系统 https://spcjsac.gsxt.gov.cn/

  13. 发票查验平台 http://inv-veri.chinatax.gov.cn/

  14. 中国关键词 http://keywords.china.org.cn/

  15. 工信部申诉受理中心 https://ythzxfw.miit.gov.cn/

  16. 合同示范文本库 https://htsfwb.samr.gov.cn/

  17. 中国法律服务网 https://www.12348.gov.cn/

  18. 中国庭审公开网 https://tingshen.court.gov.cn/

非 gov 网站

  1. 终身教育平台 https://le.ouchn.cn/

  2. 国家数字图书馆 https://www.nlc.cn/

  3. 国家哲学社会科学文献 https://www.ncpssd.cn/

  4. 国家高等教育智慧教育平台 https://www.chinaooc.com.cn/

  5. 职业教育专业教学资源库 https://zyk.icve.com.cn/


转自 一网一匠 11 个月前
1,107

本文仅针对自己遇到的情况进行整理,并不完善,仅供参考。

微信图片_20250112102607.jpg

首先点击这个封禁页面上的“客服指引”,在“微信访问网站被限制的相关问题”页面上找到反馈邮箱 moment@tencent.com,按规定格式给这个邮箱反馈情况,可以咨询具体被封禁的原因和网址等方便处理。几分钟后就能收到回信(即使是周末)。这次被告知是被手机管家拦截,并提供了另一个申述通道:http://gj.qq.com/online_server/complain_url.html。提交网址申述后等待3个工作日。

实际等了1个小时就收到回复了(即使是周末)。

微信图片_20250112110658.png

附:在线网址检测:https://urlsec.qq.com/check.html


xoyozo 11 个月前
1,810

前几天实现了在 nginx 中使用 lua 实现远程鉴权,今天想试试在 IIS 中能不能实现相同的功能。查询资料发现需要使用 URL 重写和 HTTP 请求模块,没有深究。干脆使用 ASP.NET 中间件来实现吧。

在 StratUp.cs 的 Configure 方法中,或 Program.cs 文件中添加以下代码:

// 远程鉴权
app.Use(async (context, next) =>
{
    var ip = context.Connection.RemoteIpAddress!.ToString();
    var ua = context.Request.Headers.UserAgent.ToString();
    var host = context.Request.Host.Host;
    var uri = new Uri(context.Request.GetDisplayUrl()).PathAndQuery;

    var client = new HttpClient();
    client.Timeout = TimeSpan.FromSeconds(1); // 设置超时时间

    try
    {
        var requestUrl = "https://鉴权地址/";

        var requestMessage = new HttpRequestMessage(HttpMethod.Get, requestUrl);
        requestMessage.Headers.Add("X-Real-IP", ip);
        requestMessage.Headers.Add("User-Agent", ua);
        requestMessage.Headers.Add("X-Forwarded-Host", host);
        requestMessage.Headers.Add("X-Forwarded-Uri", uri);

        // 发送请求
        var response = await client.SendAsync(requestMessage);

        // 检查响应状态码
        if (response.StatusCode == HttpStatusCode.Forbidden)
        {
            // 如果返回403,则拒绝访问
            context.Response.StatusCode = (int)HttpStatusCode.Forbidden;
            await context.Response.WriteAsync("Access Denied");
        }
        else
        {
            // 如果返回其他状态码,则继续执行管道中的下一个中间件
            await next();
        }
    }
    catch (TaskCanceledException ex) when (ex.CancellationToken.IsCancellationRequested)
    {
        // 如果请求超时(任务被取消),则继续执行管道中的下一个中间件
        await next();
    }
    catch
    {
        // 如果遇到错误,则继续执行管道中的下一个中间件
        await next();
    }
});

代码很简单,使用 HttpClient 发送请求,若返回 403 则拒绝访问,其它情况继续执行业务逻辑,超时或报错的情况按需修改即可。

若鉴权接口在私网中,建议将鉴权接口域名和私网 IP 添加到 hosts 文件中。

xoyozo 11 个月前
1,046
  1. 使 lua 支持 resty.http

  2. 在 access_by_lua_block 代码块中实现远程鉴权:

    #鉴权-START
    #resolver 223.5.5.5; # cat /etc/resolv.conf
    access_by_lua_block {
        local http = require("resty.http")
        local httpc = http.new()
        httpc:set_timeout(500)  -- 连接超时
        local res, err = httpc:request_uri("https://鉴权地址/", {
            method = "GET",
            headers = {
                ["X-Real-IP"] = ngx.var.remote_addr,
                ["User-Agent"] = ngx.var.http_user_agent,
                ["X-Forwarded-Host"] = ngx.var.host,
                ["X-Forwarded-Uri"] = ngx.var.request_uri,
            },
            ssl_verify = false, -- 禁用 SSL 验证
            timeout = 500,     -- 读取超时
        })
    
        if not res then
            ngx.log(ngx.ERR, "Failed to request: " .. err)
        end
            
        if res and res.status == 403 then
            ngx.exit(ngx.HTTP_FORBIDDEN)
            -- return ngx.redirect("https://一个显示403友好信息的页面.html")
        end
    }
    #鉴权-END

    注意更改接口地址和友情显示 403 页面地址。

    本示例仅捕获 403 状态码,500、408 等其它异常情况视为允许访问,请根据业务需求自行添加状态码的判断。

    若超时也会进入 if not res then 代码块。

    建议将此代码部署在 nginx 主配置文件的 http 代码块中(宝塔面板中的路径:/www/server/nginx/nginx/conf/nginx.conf),如果你只想为单个网站鉴权,也可以放在网站配置文件的 server 块中。

  3. 若鉴权接口在私网中,建议将鉴权接口域名和私网 IP 添加到 hosts 文件中。


  1. 直接输出字符串

    ngx.header.content_type = "text/plain";
    ngx.say("hello world!")
  2. 输出到日志

    ngx.log(ngx.ERR, "Response status: " .. res.status)

    日志在网站的 站名.error.log 中查看。

    宝塔面板查看方式:日志 - 网站日志 - 异常

  3. 若想获取服务器 CPU 使用率等信息并传递给远程鉴权接口,请参考此文

  4. 常见问题

    no resolver defined to resolve

    原因:没有定义 DNS 解析器

    解决方法:在 http 块或 server 块中添加 resolver 8.8.8.8 valid=30s;,推荐使用接入商自己的公共 DNS,如果走内网,推荐使用本机 DNS

    unable to get local issuer certificate

    原因:没有配置 SSL 证书信息

    解决方法:添加 request_uri 参数:

    ssl_verify = true,  -- 启用 SSL 验证
    ssl_trusted_certificate = "证书路径",  -- 指定 CA 证书路径

    ssl_verify = false,  -- 禁用 SSL 验证
  5. 若您不想用 lua,可以用 nginx 原生自带的  auth_request 模块来实现

xoyozo 1 年前
1,793
  1. 安装依赖

    sudo yum install -y epel-release
    sudo yum install -y lua lua-devel gcc make
  2. 下载安装 LuaRocks

    访问 LuaRocks 的官方网站 获取最新版本的 LuaRocks。你可以使用 wget 命令下载:

    wget https://luarocks.org/releases/luarocks-x.x.x.tar.gz
    tar zxpf luarocks-x.x.x.tar.gz
    cd luarocks-x.x.x
    ./configure && make && sudo make install
  3. 设置环境变量(可选)

    通常,LuaRocks 会自动处理这一步,但如果需要手动设置,可以编辑 ~/.bash_profile 或 ~/.bashrc 文件,添加以下行:

    export PATH=$PATH:/usr/local/bin

    然后运行以下命令使更改生效:

    source ~/.bash_profile
  4. 验证安装

    luarocks --version
xoyozo 1 年前
934