博客 (236)

以 ASP.NET 6 返回 BadRequestObjectResult 为例。

public IActionResult Post()
{
    return BadRequest("友好的错误提示语");
}


axios

请求示例:

axios.post(url, {})
.then(function (response) {
    console.log(response.data);
})
.catch(function (error) {
    console.log(error.response.data);
});

error 对象:

{
  "message": "Request failed with status code 400",
  "name": "AxiosError",
  "code": "ERR_BAD_REQUEST",
  "status": 400,
  "response": {
    "data": "友好的错误提示语",
    "status": 400
  }
}


jQuery

请求示例:

$.ajax 对象形式

$.ajax({
    url: url,
    type: 'POST',
    data: {},
    success: function (data) {
        console.log(data)
    },
    error: function (jqXHR) {
        console.log(jqXHR.responseText)
    },
    complete: function () {
    },
});

$.ajax 事件处理形式(Event Handlers)jQuery 3+

$.ajax({
    url: url,
    type: 'POST',
    data: {},
})
    .done(function (data) {
        console.log(data)
    })
    .fail(function (jqXHR) {
        console.log(jqXHR.responseText)
    })
    .always(function () {
    });

$.get / $.post / $.delete

$.post(url, {}, function (data) {
    console.log(data)
})
    .done(function (data) {
        console.log(data)
    })
    .fail(function (jqXHR) {
        console.log(jqXHR.responseText)
    })
    .always(function () {
    });

jqXHR 对象:

{
  "readyState": 4,
  "responseText": "友好的错误提示语",
  "status": 400,
  "statusText": "error"
}


xoyozo 3 年前
2,351

下载 sqlmap:https://github.com/sqlmapproject/sqlmap

下载 python:https://www.python.org/downloads/

以 windows 版为例:

安装 python;

解压缩 sqlmap;

“在终端中打开 / 在命令行中打开” sqlmap.py 文件所在目录;

执行命令 

python sqlmap.py -u "网址" --data="POST数据" --tables

需要注意的是,sqlmap 会记录探测过的网址的结果信息,修复网站漏洞后要再次检测是否安全时,应删除缓存文件,位置在:

C:\Users\用户\AppData\Local\sqlmap\output\

image.png

xoyozo 3 年前
4,283
操作系统
版本发布时间支持设备
macOS ???262025年6月


macOS Sequoia152024年6月

iMac (2019 年及后续机型)

Mac Pro (2019 年及后续机型)

iMac Pro (2017 年及后续机型)

Mac Studio (2022 年及后续机型)

MacBook Air (2020 年及后续机型)

Mac mini (2018 年及后续机型)

MacBook Pro (2018 年及后续机型)

macOS Sonoma142023年秋

iMac (2019 年及后续机型)

Mac Pro (2019 年及后续机型)

iMac Pro (2017 年机型)

Mac Studio (2022 年及后续机型)

MacBook Air (2018 年及后续机型)

Mac mini (2018 年及后续机型)

MacBook Pro (2018 年及后续机型)

macOS Ventura132022年10月

iMac (2017 年及后续机型)

Mac Pro (2019 年及后续机型)

iMac Pro (2017 年机型)

Mac Studio (2022 年机型)

MacBook Air (2018 年及后续机型)

Mac mini (2018 年及后续机型)

MacBook Pro (2017 年及后续机型)

MacBook (2017 年机型)

macOS Monterey122021年6月8日

iMac (2015 年末及后续机型)

Mac Pro (2013 年末及后续机型)

iMac Pro (2017 年及后续机型)

Mac mini (2014 年末及后续机型)

MacBook Air (2015 年初及后续机型)

MacBook (2016 年初及后续机型)

MacBook Pro (2015 年初及后续机型)

https://support.apple.com/zh-cn/HT212551

macOS Big Sur112020年6月23日

MacBook (2015 年或后续机型)

MacBook Air (2013 年或后续机型)

MacBook Pro (2013 年后期或后续机型)

Mac mini (2014 年或后续机型)

iMac (2014 年或后续机型)

iMac Pro (2017 年或后续机型)

Mac Pro (2013 年或后续机型)

https://support.apple.com/zh-cn/HT211238

https://support.apple.com/kb/sp833?locale=zh_CN

macOS Catalina10.152019年10月8日

MacBook (2015 年前期或之后的机型)

MacBook Air (2012 年中期或之后的机型)

MacBook Pro (2012 年中期或之后的机型)

Mac mini (2012 年后期或之后的机型)

iMac (2012 年后期或之后的机型)

iMac Pro (2017 年)

Mac Pro (2013 年后期或之后的机型)

https://support.apple.com/zh-cn/HT210222

https://support.apple.com/kb/sp803?locale=zh_CN

macOS Mojave10.142018年6月5日

MacBook (2015 年前期或之后的机型)

MacBook Air (2012 年中期或之后的机型)

MacBook Pro (2012 年中期或之后的机型)

Mac mini (2012 年后期或之后的机型)

iMac (2012 年后期或之后的机型)

iMac Pro (2017 年)

Mac Pro (2013 年后期的机型,以及支持特定 Metal 技术图形卡的 2010 年中期和 2012 年中期的机型)

https://support.apple.com/kb/SP777?locale=zh_CN

macOS High Sierra10.132017年6月5日

MacBook (2009 年后期或之后的机型)

MacBook Pro (2010 年中期或之后的机型)

MacBook Air (2010 年后期或之后的机型)

Mac mini (2010 年中期或之后的机型)

iMac (2009 年后期或之后的机型)

Mac Pro (2010 年中期或之后的机型)

https://support.apple.com/kb/SP765?locale=zh_CN

macOS Sierra10.122016年9月20日

MacBook (2009 年后期或之后的机型)

MacBook Pro (2010 年中期或之后的机型)

MacBook Air (2010 年后期或之后的机型)

Mac mini (2010 年中期或之后的机型)

iMac (2009 年后期或之后的机型)

Mac Pro (2010 年中期或之后的机型)

https://support.apple.com/kb/SP742?locale=zh_CN

OS X El Capitan10.112015年9月29日

MacBook (2015 年前期的机型)

MacBook (2008 年后期的铝金属机型以及 2009 年前期或之后的机型)

MacBook Pro (2007 年中期/后期或之后的机型)

MacBook Air (2008 年后期或之后的机型)

Mac mini (2009 年前期或之后的机型)

iMac (2007 年中期或之后的机型)

Mac Pro (2008 年前期或之后的机型)

Xserve (2009 年前期的机型)

https://support.apple.com/kb/SP728?locale=zh_CN

OS X Yosemite10.102014年10月17日

https://support.apple.com/kb/SP711?locale=zh_CN

OS X Mavericks10.92013年10月23日

iMac (2007 年中期或之后的机型)

MacBook (2008 年后期的铝金属机型、2009 年前期或之后的机型)

MacBook Pro (2007 年中后期或之后的机型)

Xserve (2009 年前期)

MacBook Air (2008 年后期或之后的机型)

Mac mini (2009 年前期或之后的机型)

Mac Pro (2008 年前期或之后的机型)

https://support.apple.com/kb/SP702?locale=zh_CN

OS X Mountain Lion10.82012年7月25日

iMac (2007 年中期或之后的机型)

MacBook (2008 年后期的铝制机型、2009 年前期或之后的机型)

MacBookPro(2007 年中期/后期或之后的机型)

Xserve (2009 年前期)

MacBook Air (2008 年后期或之后的机型)

Mac mini (2009 年前期或之后的机型)

Mac Pro (2008 年前期或之后的机型)

https://support.apple.com/kb/SP654?locale=zh_CN

OS X Lion10.72010年10月20日

https://support.apple.com/kb/SP629?locale=zh_CN

OS X Snow Leopard10.62008年6月9日

https://support.apple.com/kb/SP575?locale=zh_CN

参考资料:

使用 Mac 随附的 Mac 操作系统或兼容的更新版本

xoyozo 3 年前
6,755

第一步,创建用户和 AccessKey

登录阿里云控制台后,从头像处进入 AccessKey 管理

image.png

“开始使用子用户 AccessKey”

image.png

点击“创建用户”,填写用户名(本文以 oss-bbs 为例),并勾选“Open API 调用访问”

image.png

点击确定创建成功,可以看到 AccessKey ID 和 AccessKey Secret


第二步,创建权限策略

在阿里云控制台左侧菜单“RAM 访问控制”中展开“权限管理”,选择“权限策略”

image.png

点击“创建权限策略”,切换到“脚本编辑”

image.png

输入以下策略文档(JSON 格式)

{
    "Version": "1",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                    "oss:ListBuckets",
                    "oss:GetBucketStat",
                    "oss:GetBucketInfo",
                    "oss:GetBucketAcl" 
                      ],    
            "Resource": "acs:oss:*:*:*"
        },
        {
            "Effect": "Allow",
            "Action": [
                    "oss:Get*",
                    "oss:Put*",
                    "oss:List*",
                    "oss:DeleteObject"
                    ],
            "Resource": "acs:oss:*:*:bbs"
        },
        {
            "Effect": "Allow",
            "Action": [
                    "oss:Get*",
                    "oss:Put*",
                    "oss:List*",
                    "oss:DeleteObject"
            ],
            "Resource": "acs:oss:*:*:bbs/*"
        }
    ]
}

脚本中第一段表示允许用户登录,第二段表示允许操作 Bucket,第三段表示允许操作 Bucket 内的文件对象。

示例中的 bbs 是 Bucket Name,请修改为自己的 Bucket 名称。

点击下一步,填写名称,确定即可。


第三步,添加用户权限

转到“用户”页面,在刚才创建的用户行“添加权限”

image.png

切换到“自定义策略”,将上一步创建的权限策略添加到右侧“已选择”区

image.png

确定。


相关信息:

You have no right to access this object because of bucket acl.

xoyozo 3 年前
3,769

首先,禁止网站下所有 .php 等文件均不允许被访问到。

在 nginx 网站配置文件中,include enable-php-**.conf; 上方插入:

location ~ ^/.*\.(php|php5|py|sh|bash|out)$ { deny all; }

其中,^ 匹配开始,/.* 匹配所有目录和文件名,\.(php|php5|py|sh|bash|out) 匹配文件后缀名,$ 匹配结束。

即便如此,仍然忽略了 nginx 中 .php 文件名后加斜杠仍然能访问到的情况,譬如我们访问这个网址:

https://xoyozo.net/phpinfo.php/abc.html

nginx 仍然运行了 phpinfo.php,给了后门可趁之机,所以改进为:

location ~ ^/.*\.(php|php5|py|sh|bash|out)(/.*)?$ { deny all; }


Discuz! X3.4 需要写入权限的目录:

  • /自研目录/upload/

  • /config/

  • /data/

  • /uc_client/data/

  • /uc_server/data/

  • /source/plugin/

但,这些都不重要,我们已经禁止了所有目录的 .php 访问了。


第二步,解禁需要直接被访问到的文件路径。

Discuz! X3.4 根目录下的 .php 文件都是入口文件,需要能够被访问到:

/admin.php
/api.php
/connect.php
/forum.php
/group.php
/home.php
/index.php
/member.php
/misc.php
/plugin.php
/portal.php
/search.php

其它目录中需要被直接访问到的文件:

/archiver/index.php
/m/index.php
/uc_server/admin.php
/uc_server/avatar.php
/uc_server/index.php

部分插件文件需要能够被直接访问到:

/source/plugin/magmobileapi/magmobileapi.php
/source/plugin/smstong/accountinfo.php
/source/plugin/smstong/checkenv.php

另外如果有自建目录需要有 .php 访问权限,那么也需要在此处加白,本文以 /_/ 目录为例

最终拼成:工具

location ~ ^(?:(?!(/admin\.php|/api\.php|/connect\.php|/forum\.php|/group\.php|/home\.php|/index\.php|/member\.php|/misc\.php|/plugin\.php|/portal\.php|/search\.php|/archiver/index\.php|/m/index\.php|/uc_server/admin\.php|/uc_server/avatar\.php|/uc_server/index\.php|/source/plugin/magmobileapi/magmobileapi\.php|/source/plugin/smstong/accountinfo\.php|/source/plugin/smstong/checkenv\.php|/_/.*\.php))/.*\.(php|php5|py|sh|bash|out)(/.*)?)$ { deny all; }

这里用到正则表达式中的“不捕获”和“负向零宽断言”语法,格式为:

^(?:(?!(允许的目录或文件A|允许的目录或文件B))禁止的目录和文件)$

值得注意的是,此句负向零宽断言中的匹配内容是匹配前缀的,也就是说

https://xoyozo.net/index.php
https://xoyozo.net/index.php/abc.html

都可以访问到,而

https://xoyozo.net/forbidden.php
https://xoyozo.net/forbidden.php/abc.html

都访问不到,这是符合需求的。

如果自建目录 /_/ 下有写入需求,单独禁止即可,以 /_/upload/ 为例:

location ~ ^/_/upload/.*\.(php|php5|py|sh|bash|out)(/.*)?$ { deny all; }


ThinkPHP 网站有统一的访问入口,可按本文方法配置访问权限。


特别注意:上面的代码必须加在 PHP 引用配置(include enable-php-**.conf;)的上方才有效。


附:一键生成 nginx 访问控制 location URI { } 语句工具

xoyozo 3 年前
3,912

在 Windows 11 电脑为例,通过无线网络连接 Wifi 网络,该网络是由多台路由器通过 AP 的方式连接,查看电脑连接的是哪台路由器,首先打开设置 - 网络和 Internet

image.png

点击属性,可以看到当前连接的网络频带和网络通道

image.png

图中可见,当前使用 149 信道连接网络。

打开 Vistumbler,点击 Scan APs,可以看到附近所有的 Wifi 信号

image.png

图中红框标出的是使用了相同 SSD 和密码的 AP 路由器,其中,我的电脑连接的是 149 信道对应的路由器,根据 MAC 地址、生产厂商等信息就可以判断是哪一台路由器了。

xoyozo 3 年前
6,210

您需要将 IWebHostEnvironment 注入到类中才能访问属性值 ApplicationBasePath:阅读有关依赖关系注入的信息。成功注入依赖项后,wwwroot 路径应该可供您使用。例如:

private readonly IWebHostEnvironment _appEnvironment;

public ProductsController(IWebHostEnvironment appEnvironment)
{
   _appEnvironment = appEnvironment;
}

用法:

 [HttpGet]
 public IEnumerable<string> Get()
 {
    FolderScanner scanner = new FolderScanner(_appEnvironment.WebRootPath);
    return scanner.scan();
 }

编辑:在 ASP.NET 的更高版本中,IHostingEnvironment 已被替换为 IWebHostEnvironment

O
转自 Oluwafemi 3 年前
4,000

不要使用 CSS 方式设置 canvas 的宽高,应使用属性来设置其尺寸。

直接设置属性:

<canvas id="canvas" width="400" height="300"></canvas>

因属性值是以 px 为单位的,如果项目全程使用 rem 等其它尺寸单位,可通过 JS 来设置

var canvas = document.getElementById('canvas');
coatingW = $('#coating_frame').width();
coatingH = $('#coating_frame').height();
canvas.width = coatingW;
canvas.height = coatingH;


xoyozo 3 年前
2,010
public static class EntityFrameworkCoreExtension
{
    private static DbCommand CreateCommand(DatabaseFacade facade, string sql, out DbConnection connection, params object[] parameters)
    {
        var conn = facade.GetDbConnection();
        connection = conn;
        conn.Open();
        var cmd = conn.CreateCommand();
        cmd.CommandText = sql;
        cmd.Parameters.AddRange(parameters);
        return cmd;
    }

    public static DataTable SqlQuery(this DatabaseFacade facade, string sql, params object[] parameters)
    {
        var command = CreateCommand(facade, sql, out DbConnection conn, parameters);
        var reader = command.ExecuteReader();
        var dt = new DataTable();
        dt.Load(reader);
        reader.Close();
        conn.Close();
        return dt;
    }

    public static List<T> SqlQuery<T>(this DatabaseFacade facade, string sql, params object[] parameters) where T : class, new()
    {
        var dt = SqlQuery(facade, sql, parameters);
        return dt.ToList<T>();
    }

    public static List<T> ToList<T>(this DataTable dt) where T : class, new()
    {
        var propertyInfos = typeof(T).GetProperties();
        var list = new List<T>();
        foreach (DataRow row in dt.Rows)
        {
            var t = new T();
            foreach (PropertyInfo p in propertyInfos)
            {
                if (dt.Columns.IndexOf(p.Name) != -1 && row[p.Name] != DBNull.Value)
                {
                    p.SetValue(t, row[p.Name], null);
                }
            }
            list.Add(t);
        }
        return list;
    }
}

调用示例:

var data = db.Database.SqlQuery<List<string>>("SELECT 'title' FROM `table` WHERE `id` = {0};", id);


转自 我的个去 3 年前
2,370

普通的 nginx http 反向代理 https 时是需要配置证书的,但我们又不可能由源域名的证书,所以要使用 nginx 的 stream 模块。普通的 nginx 反向代理属于第七层代理,而 stream 模块是第四层代理,通过转发的 tcp/ip 协议实现高功能,所以不需要证书。

我们这里以使用宝塔安装的 nginx 为例,其实其他系统也是类似,只要找到编译的 nginx 的源码目录就行了

编译前先将已经安装的 nginx 文件进行备份

通过 ps 命令查看 nginx 文件的路径。以下所有步骤都以自身 nginx 路径为准

# ps -elf | grep nginx
# cd /www/server/nginx/sbin/
# cp nginx nginx.bak

然后查看当前 nginx 编译的参数

/www/server/nginx/sbin/nginx -V

将 ./configure arguents:之后的内容复制到记事本备用(备注:我们这里其实使用的是 Tengine-2.3.1,所以下面的编译参数可能跟普通 nginx 不是很一样)

内容如下:

--user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --with-openssl=/www/server/nginx/src/openssl --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --add-module=/www/server/nginx/src/lua_nginx_module --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-pcre=pcre-8.42 --with-cc-opt=-Wno-error --add-module=/www/server/nginx/src/ngx-pagespeed

进入 src 目录

cd /www/server/nginx/src

我们在上面的内容中加入两个参数

./configure --user=www --group=www --prefix=/www/server/nginx --add-module=/www/server/nginx/src/ngx_devel_kit --with-openssl=/www/server/nginx/src/openssl --add-module=/www/server/nginx/src/ngx_cache_purge --add-module=/www/server/nginx/src/nginx-sticky-module --add-module=/www/server/nginx/src/lua_nginx_module --with-http_stub_status_module --with-http_ssl_module --with-http_v2_module --with-http_image_filter_module --with-http_gzip_static_module --with-http_gunzip_module --with-ipv6 --with-http_sub_module --with-http_flv_module --with-http_addition_module --with-http_realip_module --with-http_mp4_module --with-ld-opt=-Wl,-E --with-pcre=pcre-8.42 --with-cc-opt=-Wno-error --add-module=/www/server/nginx/src/ngx-pagespeed --with-stream --with-stream_ssl_preread_module

并执行它

然后

make && make install

重启 nginx

service nginx restart

nginx -V 看看模块是不是加载了

image.png

新建个站点,配置反向代理


卸载

使用 nginx.bak 文件替换掉自编译的 nginx 文件,替换后重启 nginx。

转自 笨牛网 3 年前
2,951