首页
📷在线壁纸
🎬娱乐天地
🔖友情链接
更多
📝留言板
Search
1
【javascript】JS-向当前url追加参数
2,345 阅读
2
【PHP】生成随机昵称
2,202 阅读
3
【PHP】判断一个字符串是否属于序列化后的数据
2,024 阅读
4
【css】html+css给文章页,做阅读全文
1,975 阅读
5
【PHP】 设计模式(23种)
1,909 阅读
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍡 AI
🍭文艺范
🍏mac
登录
Search
标签搜索
php
typecho
代码注释
redis
mysql
go
golang
nginx
thinkphp
docker
gin
linux
curl
html
mamp
算法
短网址
构造函数
webhook
代码片段
依然范儿特西
累计撰写
145
篇文章
累计收到
1
条评论
首页
栏目
📂默认分类
💓typecho
🏳️🌈代码改变世界
🍇 mysql
🍈 Winform
🍓 golang
🍉 设计模式
🥝 PHP
🍎 python
🍊 nginx
🍋 网络安全
🍍 javascript
🫑 database
🍡 AI
🍭文艺范
🍏mac
页面
📷在线壁纸
🎬娱乐天地
🔖友情链接
📝留言板
搜索到
124
篇与
的结果
2022-04-08
图片<img>、链接<a>等去除referer标记
1 img 标签<img src='src' referrerpolicy='no-referrer' >referrerpolicy:no-referrer 访问来源信息不随着请求一起发送no-referrer-when-downgrade (默认值)在同等安全级别的情况下,会发送引用页面的地址,如HTTPS->HTTPS,但是如 HTTPS->HTTP,则不发送。origin发送文件的源作为引用地址。如 https://xxx.com/xxxx.html 会发送 https://xxx.com/origin-when-cross-origin同源的请求,会发送完整的URL作为引用地址,对于非同源请求则仅发送文件的源。same-origin对于同源的请求会发送引用地址,对于非同源请求则不发送引用地址strict-origin在同等安全级别的情况下,发送文件的源, 如HTTPS->HTTPS,但是如 HTTPS->HTTP,则不发送。strict-origin-when-cross-origin对于同源的请求,会发送完整的URL作为引用地址;在非同源但同等安全级别的情况下,如HTTPS->HTTPS,但是如 HTTPS->HTTP,则不发送。unsafe-url无论是同源请求还是非同源请求,都发送完整的 URL(移除参数信息之后)作为引用地址。2 a 标签<a href='link' rel='noreferrer'/>noreferrer不发送跳转页面来源nofllow告诉搜索引擎,不要将该链接计入权重noopener打开添加了 rel="noopener" 的链接,window.opener 会为 null若 target="_blank" 没有和 rel="nofollow noopener noreferrer" 配合使用,会拿到当前页的 window 对象3,全局设置不发送referer<meta name="referrer" content="no-referrer" />
2022年04月08日
106 阅读
0 评论
0 点赞
2022-03-30
此图片来自微信公众平台未经允许不可引用的处理方式
当你拿到微信图片在自己网站引入时候 会提示不可引用,此时在头部加入代码方式一 <!--全局禁用 referer--> <meta name="referrer" content="no-referrer" /> <meta data-draft-node="block" data-draft-type="table" data-size="normal" data-row-style="normal">方式二读取url图片。转为 base64 输出/** * 获取网络图片的Base64编码 * $img_url 网络图片地址 * $hasPre 是否有前缀 * @return string */ if (!function_exists('imgToBase64')){ function imgToBase64($img_url,$hasPre = true) { $img_base64 = ''; $imageInfo = getimagesize($img_url); if (!$imageInfo) { return false; } $img_base64 = "" . chunk_split(base64_encode(file_get_contents($img_url))); if ($hasPre) { $img_base64 = 'data:' . $imageInfo['mime'] . ';base64,'.$img_base64; } return $img_base64; } }
2022年03月30日
332 阅读
0 评论
2 点赞
2022-03-25
PHP使用socket检测ip端口是否开放
1 开启 socket 扩展, php.ini 里extension=sockets使用 php -m 查看是否成功2 代码<?php $ip = '127.0.0.1'; $prot = '8080'; checkIp($ip,$prot); //检测ip是否可用 function checkIp($ip,$port){ $sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); socket_set_nonblock($sock); socket_connect($sock,$ip, $port); socket_set_block($sock); $return = @socket_select($r=array($sock), $w = array($sock), $f = array($sock), 3); socket_close($sock); switch($return) { case 0: echo "$ip:$port 超时\n"; break; case 1: echo "$ip:$port 打开\n"; break; case 2: echo "$ip:$port 关闭\n"; break; } } ?>
2022年03月25日
175 阅读
0 评论
0 点赞
2022-02-22
解决redis大key问题
很多朋友肯定在想redis的key能有多大呀? 这里就有个误区了,所谓的大key问题是某个key的value比较大,所以本质上是大value问题。
2022年02月22日
465 阅读
0 评论
3 点赞
2022-02-11
互联网工作生存指南
互联网工作生存指南
2022年02月11日
97 阅读
0 评论
1 点赞
2022-02-11
几款代码版的冰墩墩
1. 素描版冰墩墩github: https://github.com/XYZliang/iWantBingDunDun预览: https://www.jxufesoftware.club/iWantBingDunDun2. Three.js + React 版冰墩墩github: https://github.com/dragonir/3d/tree/master/src/containers/Olympic预览: https://dragonir.github.io/3d/#/olympic3. ptyhon 版冰墩墩github: https://github.com/crossin/snippet/tree/master/BingDwenDwen4. 桌面宠物版冰墩墩https://github.com/HITgzx/Bing_Dwen_Dwen5 go版本如何处理呢可以使用这个库:https://github.com/qeesung/image2ascii找一张冰墩墩的图片, 直接命令行image2ascii -f bingdundun.jpg
2022年02月11日
433 阅读
0 评论
2 点赞
2021-12-09
渗透测试
渗透测试原理由安全专家对网站应用系统,尤其是通过基于 web 的应用系统进行应用安全评估和渗透测试,发现和弥补应用系统存在的弱点。安全专家模拟黑客全面检测 web 应用存在的漏洞并使用攻击向量对漏洞进行控制操作,评估漏洞对企业平台功能或资产可以造成的损害,进面评估对企业业务的影响。原理如图所示:标准遵从国内标准:GB/T 17859-1999 计算机信息系统安全保护等级划分准则GB/T 20984-2007 信息安全技术 信息安全风险评估规范GB/T 19716-2005 信息技术 信息安全管理实用规则GB/Z 20986-2007 信息安全事件分类分级指南GB/T18336-2008 信息技术 安全性评估准则GB/T 20988-2007 信息系统灾难恢复规范GB/T 32213-2015 信息安全技术 公钥基础设施 远程口令鉴别与密钥建立规范GB/T 31722-2015 信息技术 安全技术 信息安全风险管理GB/T 35284-2017 信息安全技术 网站身份和系统安全要求与评估方法国际标准:ISO27000 系列ISO15408 信息技术安全评估准则Microsoft 和 IBM 软件开发生命周期OWASP TOP 10 Web 安全应用风险ISO13335 信息技术-IT 安全管理指南CC-ISO15408 信息技术安全性评估准则NIST SP 800-30 信息技术系统风险管理指南NIST SP 800-26 信息技术系统安全自我评估指南美国国家安全局 (NAS) 发布的 SSE-CMM V2.0 模型漏洞评级定义序号漏洞名称漏洞危害1核心功能认证缺失高2系统命令注入高3SQL 注入高4恶意文件/脚本上传高5访问控制失效(水平/垂直越权)高6敏感文件下载高7服务器端模板注入高8Python 代码注入高9相对路径遍历中10GET 方法提交敏感参数高11LDAP 注入高12XML 注入(XXE)高13XPath 注入高14存储型 XSS高15反射型 XSS中16DOM XSS中17敏感文件泄露高18访问控制失效(强制浏览)高19业务逻辑绕过高/中/低20不安全的密码重置功能(任意密码重置)高21短信轰炸、邮箱轰炸中22不可用的功能高23敏感信息被明文返回中24敏感信息未被加密存储在后端数据库中25敏感信息未加密中26CSRF中27暴力破解中28URL 重定向中29未加盐的密码哈希中30敏感错误信息泄露低31邮件地址泄露低32用户名枚举低33内部主机名泄露低34内部 IP 泄露低35通过 HTTP 请求的 SQL 语句枚举数据库信息高36超级管理员控制台可被 Internet 访问中37密码复杂度要求缺失中38登录后会话 ID 未更新中39允许未受信任的 SSL 证书中40可预测的会话 Cookie中41Cookie 存储敏感信息中42未强制加密中43未被设置为安全的会话 Cookie中44没有登出功能中45不过期的会话中46登出功能不终止会话中47应用允许同时登陆中48未启用端对端加密机制中49敏感信息缓存中50非必要的 HTTP 方法中51跨域资源共享(CORS)低52缺少更改密码功能中53表单开启自动填写功能低54服务器允许列出目录列表低55跨域脚本包含低56不完整的登出(子窗口不关闭)低57会话过期后无重定向低58Robots.txt 文件暴露网站结构低59敏感代码注释低60服务器信息泄露低61Cookie 未设置 HTTPOnly低62VIEWSTATE 参数泄露敏感信息低63过长的会话过期时间低64缺少 Strict Transport Security 头部低65HTTP.sys 远程代码执行中66OpenSSL 心跳信息泄露(心脏流血)中67软件版本过低低68操作系统版本过低低69脆弱的软件组件低70不受支持/易被攻击的版本低71Host 头部注入中72开放多余的服务中73脆弱的 SSL 版本(SSLv2,SSLv3)中74支持 SSL 脆弱加密套件中75跨框架脚本攻击(CFS)中76允许外域 Flash 访问中77服务器存在非必要文件低78Flash 参数“Allow Script Access”被设置为“Always”低79服务器隐藏目录被发现低80未设置 X-Frame-Options 头低81未设置 X-Content-Type-Options 头低82未设置 Cache-Control 头低83弱口令高84SNMP 弱口令中渗透测试工具集渗透测试团队用到的渗透测试工具集参考名称作用归属nmap端口扫描、主机发现信息收集subDomainsBrute子域名发现信息收集firebug数据分析信息收集wireshark数据分析信息获取Fiddler数据分析信息收集whois收集信息信息收集DirBrute目录扫描信息收集wpscan漏洞扫描漏洞发现Burpsuite综合利用工具信息收集AWVS漏洞扫描器漏洞发现Beef XSS综合利用漏洞利用hydra暴力破解漏洞利用metasploit渗透测试框架漏洞利用sqlmapSQL 注入利用漏洞利用HavijSQL 注入利用漏洞利用struts2利用工具 针对 struts2 漏洞漏洞利用中国菜刀管理 webshell漏洞利用nc端口转发内网渗透lcx端口转发内网渗透reGeorgproxy流量转发内网渗透proxychain代理工具内网渗透reDug流量转发内网渗透Tunna流量转发内网渗透mimikatzwindows 密码获取内网渗透AndroidKiller反编译 apk 文件源码获取ApkToolkit反编译 apk 文件源码获取APKIDE反编译 apk 文件源码获取jd-guijava 反编译源码分析Winhex编辑工具二进制分析常见漏洞测试方法SQL 注入测试将数据包中存在参数的值修改为测试语句,并观察返回包数据常见测试语句内容如下:AND 1=1/ AND 1=2 'AND '1'='1/'AND '1'='2 "AND "1"="1/"AND "1"="1━ XSS 漏洞测试将数据包中存在参数的值修改为测试语句,并观察返回包数据常见测试语句内容如下:“;prompt(document.cookie);// ‘“><script>alert(document.cookie)</script>━ 越权漏洞测试将数据包中参数进行修改,观察返回数据包中是否包含超出用户权限的数据。━ 逻辑漏洞测试将数据包中参数进行修改,观察返回数据包中违反正常业务逻辑是否可被系统执行。━ 暴力破解漏洞测试短时间内大量发送含有测试语句的数据包至特定身份认证接口,观察返回数据包状态, 判断是否已发送数据包均被系统处理。━ 短信轰炸漏洞测试使用测试工具短时间内频繁发送请求短信数据包,观察系统是否存在短信发送频率限制。━ 任意文件下载漏洞测试下载系统文件,观察是否对用户查看或下载的文件不做限制。━ 跨站请求伪造测试构造请求之后以其他账户身份登录之后点击,观察该请求操作是否被执行。━ URL 重定向测试在 URL 中构造一个恶意地址,查看用户是否跳转到恶意网站。━ 敏感信息泄露测试发送请求数据包,观察其中是否存在敏感信息.
2021年12月09日
270 阅读
2 评论
0 点赞
2021-12-01
好诗集锦
正在播放《open car》 ●━━━━━━━──5:01 ⇆ ◁ ❚❚ ▷ ↻ 1代码写得好,下班走得早, 领导瞧一瞧,绩效往下调; 代码写得烂,加班除炸弹, 领导看一看,提拔当骨干。2写字楼里写字间,写字间里程序员; 程序人员写程序,又拿程序换酒钱。 酒醒只在网上坐,酒醉还来网下眠; 酒醉酒醒日复日,网上网下年复年。 但愿老死电脑间,不愿鞠躬老板前; 奔驰宝马贵者趣,公交自行程序员。 别人笑我忒疯癫,我笑自己命太贱; 不见满街漂亮妹,哪个归得程序员?3天下英雄出我辈, 一入职场衰命催。 加班欠薪谈笑间, 不及富婆一场睡。
2021年12月01日
165 阅读
0 评论
1 点赞
2021-11-24
Golang 实现结构体数组按多字段排序
php 排序写法近期因项目重构(php->golang),涉及到一些将对象列表中的对象按不同的字段(属性)排序;在 php 中,可以使用 usort + 自定义的排序函数轻松实现;PHP usort 官方文档下面我们先看一个在 php 中的例子: 下面是一个待排序待数组<?php $result = array( array( "val" => "f", "mtime" => 1595144638, "orderval"=>4 ), array( "val" => "d", "mtime" => 1595144646, "orderval"=>2 ), array( "val" => "a", "mtime" => 1595144648, "orderval"=>8 ), array( "val" => "t", "mtime" => 1595144648, "orderval"=>5 ), array( "val" => "e", "mtime" => 1595144650, "orderval"=>3 ) );我们目前待目标是将该数组中待对象按 mtime 从大到小排序;如果 mtime 字段的值相等,则按 orderval 从大到小排,最终想要的结果为:e,a,t,d,f[ {"val"=>"e","mtime"=>1595144650,"orderval"=>3}, {"val"=>"a","mtime"=>1595144648,"orderval"=>8}, {"val"=>"t","mtime"=>1595144648,"orderval"=>5}, {"val"=>"d","mtime"=>1595144646,"orderval"=>2}, {"val"=>"f","mtime"=>1595144638,"orderval"=>4} ] 我们首先定义一个自定义函数,然后巧妙使用 usort 函数去调用的自定义函数,最终实现目标,直接上代码:php $result = array( array( "val" => "f", "mtime" => 1595144638, "orderval"=>4 ), array( "val" => "d", "mtime" => 1595144646, "orderval"=>2 ), array( "val" => "a", "mtime" => 1595144648, "orderval"=>8 ), array( "val" => "t", "mtime" => 1595144648, "orderval"=>5 ), array( "val" => "e", "mtime" => 1595144650, "orderval"=>3 ) ); //按mtime 从大到小;如果mtime 相等,则按orderval 从大到小; usort($result, function ($v1, $v2) { if ($v1['mtime'] < $v2['mtime'] || ($v1['mtime'] == $v2['mtime'] && $v1['orderval'] < $v2['orderval'])) { return 1; } else { return -1; } }); var_dump($result); 运行结果:array(5) { [0]=> array(3) { ["val"]=> string(1) "e" ["mtime"]=> int(1595144650) ["orderval"]=> int(3) } [1]=> array(3) { ["val"]=> string(1) "a" ["mtime"]=> int(1595144648) ["orderval"]=> int(8) } [2]=> array(3) { ["val"]=> string(1) "t" ["mtime"]=> int(1595144648) ["orderval"]=> int(5) } [3]=> array(3) { ["val"]=> string(1) "d" ["mtime"]=> int(1595144646) ["orderval"]=> int(2) } [4]=> array(3) { ["val"]=> string(1) "f" ["mtime"]=> int(1595144638) ["orderval"]=> int(4) } }那么同样的功能,如果要用 golang 来实现,应如何办呢?golang 排序下面我们首先讲讲 golang 官方对排序 对支持,然后给出具体对例子;package main import ( "fmt" "sort" ) type Obj struct { Var string `json:"var"` Mtime int `json:"mtime"` Orderval int `json:"orderval"` } type List []Obj func (p List) Len() int { return len(p) } // 此处排序是从大到小的, 如果想升序,可以把此方法里的 判定 改为 相反的判定即可 func (p List) Less(i, j int) bool { if p[i].Mtime > p[j].Mtime { return true } if p[i].Mtime < p[j].Mtime { return false } return p[i].Orderval > p[j].Orderval } func (p List) Swap(i, j int) { p[i], p[j] = p[j], p[i] } func (p *List) Sort() { sort.Sort(p) } func main() { s := List{{"f", 1595144638, 4}, {"d", 1595144646, 2}, {"a", 1595144648, 8}, {"t", 1595144648, 5}, {"e", 1595144650, 3}} fmt.Println(s) s.Sort() fmt.Println(s) } // 如果想使用传入的方法来写,可以把main 方法 的写法改为下边这个 //func toSortAsc(UserList []Obj)[]Obj{ // s := List{} // for _,v := range UserList{ // s = append(s,v) // } // s.Sort() // return s //} 再举一个简单的例子package main import ( "fmt" "sort" ) type Instance struct { Domain string `json:"domain"` Ip string `json:"ip"` Containers []string `json:"containers,omitempty"` } func main() { instances := make([]*Instance, 0, 10) i1 := &Instance{} i1.Domain = "zhap" i1.Ip = "1" instances = append(instances, i1) i2 := &Instance{} i2.Domain = "abc" i2.Ip = "2" instances = append(instances, i2) i3 := &Instance{} i3.Domain = "mid" i3.Ip = "3" instances = append(instances, i3) fmt.Println("排序前 ") for _, v := range instances { fmt.Println(*v) } sort.Slice(instances, func(i, j int) bool { return instances[i].Domain < instances[j].Domain }) fmt.Println("排序后 ") for _, v := range instances { fmt.Println(*v) } }
2021年11月24日
740 阅读
0 评论
2 点赞
2021-11-19
golang 接收命令行参数
方式一package main import ( "fmt" "os" ) func main() { fmt.Println("命令行的参数有", len(os.Args)) // 遍历 os.Args 切片,就可以得到所有的命令行输入参数值 for i, v := range os.Args { fmt.Printf("args[%v]=%v\n", i, v) } }执行结果> go run ./main.go laofan 123 456 789 命令行的参数有 5 args[0]=Temp\go-build\b001\exe\main.exe args[1]=laofan args[2]=123 args[3]=456 args[4]=789 >方式二如像 mysql 那样:mysql -u root -p 123456,可以指定输入内容,输入顺序可变。flag包实现了命令行参数的解析:package main import ( "flag" "fmt" ) func main() { // 定义几个变量,用于接收命令行的参数值 var user string var password string var host string var port int // &user 就是接收命令行中输入 -u 后面的参数值,其他同理 flag.StringVar(&user, "u", "root", "账号,默认为root") flag.StringVar(&password, "p", "", "密码,默认为空") flag.StringVar(&host, "h", "localhost", "主机名,默认为localhost") flag.IntVar(&port, "P", 3306, "端口号,默认为3306") // 解析命令行参数写入注册的flag里 flag.Parse() // 输出结果 fmt.Printf("user:%v\npassword:%v\nhost:%v\nport:%v\n", user, password, host, port) } 执行结果> go run ./main.go -p 123 -u laofan -P 3306 -h 127.0.0.1 user:laofan password:123 host:127.0.0.1 port:3306 > 方式二的另一种写法 package main import ( "flag" "fmt" ) func main () { //获取命令参数 Act := flag.String("act", "", "is ok") date := flag.String("date", "", "id") // 解析命令行参数写入注册的flag里 flag.Parse() fmt.Println("act :", *Act) fmt.Println("date :", *date) }访问结果> go run ./main.go -act laofan -date today act : laofan date : today >
2021年11月19日
162 阅读
0 评论
2 点赞
1
...
3
4
5
...
13