windows文件夹右键菜单中添加“用Sublime打开”

在文件夹的右键菜单添加“用Sublime打开” 1、打开注册表编辑器regedit 2、找到HKEY_CLASSES_ROOT\Directory\shell,右键shell,选择新建项SublimeText3。 然后修改“默认”字符串的值为“Open in SublimeText3”(这是在右键菜单中显示的字符串) 然后新建字符串值Icon=C:\Program Files\Sublime Text 3\sublime_text.exe,0 (路径改为你的sublime程序路径,这是在右键菜单中显示sublime图标) 3、右键SublimeText3,在其下新建项Command,默认值为 C:\Program Files\Sublime Text 3\sublime_text.exe "%1" (同样路径要改成你的sublime程序路径) 大功告成:   […]

php木马

最近参加了一次网络攻防大赛的培训。学到了不少知识,挺好的。 php的一句话木马 <?php // 这是一个GET版本的木马 // 用法是 http://domain/cmdget.php?cmd=phpinfo();exit(); @eval($_GET['cmd']); ?> 上面这一句话就是一个php的木马。当然,木马的前提是要将这个php文件上传到你的web服务器中,并且可通过url访问才行。有很多web漏洞可能导致被上传木马,包括上传文件漏洞、sql漏洞等等。 解释一下上面这一句话: @符号,是php的错误控制符,放在任何表达式之前,该表达式可能产生的任何错误信息都被忽略掉。可以放可不放。 eval(code_str), eval函数把字符串参数code_str当作php代码来解析执行。 $_GET[‘cmd’]就很好解释了,就是获取url中的cmd查询字符串。 所以合起来的意思就是执行用户在url查询字符串cmd输入的语句。这个语句可以是任意合法的php语句。phpinfo(),exit()(加exit是因为有时候这一句话木马是注入到别的php文件里面的,为防止该文件的其他php语句打乱输出结果,直接执行完想要的命令就终止运行。)还有一个很重要的php语句system(cmd),可以执行系统指令,并输出结果。 所以,实用http://domain/cmdget.php?cmd=system(“ls -tl”);exit();就能得到在web服务器ls -tl命令同样的结果。这样就叫getShell了。

wnmp启停脚本

windows下启动mysql、php、nginx ::关闭回显 @echo off set WNMP_HOME=C:/wnmp set NGINX_HOME=C:/wnmp/nginx-1.14.0 set PHP_HOME=C:/wnmp/php-7.2.7-nts-Win32-VC15-x64 echo Starting mysql… set status=1 (tasklist|find /I "mysqld.exe" || set

【自转】squid + stunnel, fuck the G※F※W

去年写过一篇文章关于用squid + stunnel搭建加密的代理服务器(http://www.hawu.me/operation/886),然后因为涉及“不正当获取国外互联网信息”而被阿里云封杀了,简直日了狗了。技术是无罪的。 原文内容如下面截图,我想阿里没这么屌可以对全文做OCR来屏蔽了吧。竖中指 凸(-. -;

站内信的数据库设计

站内信现在几乎可以说是任何一套web系统的标配模块,那怎么样设计一个优雅的站内信模块呢。 首先,我们将站内信区分一下: 点到点:一对一发送的站内信,比如用户A发给用户B的消息,或者系统发给用户A的通知。type=private 点到多:一对多发送的站内信,接收对象较少,而且接收对象无特殊共性。可以当做私信。type=private 点到面:一对多发送的站内信,接收对象较多,而且接收对象同属于某用户组之类的共同属性。type=group 点到全部:一对多发送的站内信,接收对象为全部用户。通常为系统通知。type=global 一、用户量少 可以采用最简单的实现方式,只需要用到一张message表 不管是一对一的私信还是一对多的群发,每发给一个用户,就在表中插入一条数据,简单粗暴。 但是如果考虑到一对多的消息比较多的时候,消息的content字段其实是冗余的,可以将这张表拆成两份 二、拆分消息表 message表 message_content表 这样拆分后,对于一对一的私信,需要在message表与message_content表各插入一条数据。 对于一对多的消息,在message_content表只需要插入一条数据,大大节省了消息数据的存储空间。不过每发给一个用户,仍需要对应的在message表中插入一条数据。 再考虑一下,如果用户数量已经增长到百万级别,那么这个时候想要给所有用户发送一条全局系统通知,虽然说在message_content中只需要插入一条数据(type=global, sender_id=0),但message表中却仍要插入百万条数据,这个数据量是很可怕的。 三、用户量大 既然我们不希望因为一条系统广播而为每一个用户都在message表中插入一条数据。那么还有什么办法可以减少message表的存储量呢。不妨逆向思维一下,对于这种广播类的消息(type=group||global),并不是为每一个接收用户在message表中插入一条数据,而是只有当用户处理过该消息后(status=已读||删除)才将这一行插入message表。根据28原则,一个网站的活跃用户大概也就20%甚至更少。这样,只在message表中存储已处理的广播消息,能极大的减少存储空间。 所以,message与message_content表结构都不用变。

POST提交数据的方式

最近第一次使用vuejs做前端,用axios库来做表单的提交,结果发现php后台的$_POST是一个空数组,无法获取提交过来的数据。 查了一下,发现这个前端POST提交数据的方式有关。 1. 默认的application/x-www-form-urlencoded方式 使用html原生的<form>标签,并且不设置enctype属性,那么表单数据就会默认以application/x-www-form-urlencoded方式提交。 <form action="doAction.php" method="post"> 名字: <input type="text" name="fname"> <input type="submit" value="提交"> </form> 这时候可以看一下请求头的Content-Type: 这样,在php后台使用$_POST就能得到用户提交的表单数据。echo $_POST[‘fname’]; 另外如果使用传统jquery的$.ajax来提交form表单,默认也是以application/x-www-form-urlencoded方式来提交,所以使用$.ajax时候经常要将表单变量$(“#form_name”)序列化(serilize)

破解geetest的拖动验证码

最近有个项目需要爬取“国家企业信用信息公示系统”的数据,在该网站点击搜索按钮时,会弹出极验(geetest)的拖动式验证码。 遂一番google之,发现果然有哥们已经破解了这套验证码系统,甚至放出源码来了。学以致用。 原理很简单,首先定位缺口的位置,然后驱动浏览器将按钮移动到该位置。至于如何定位缺口位置,其实这个验证图是分上下两张的,底图是完整图,上一层则是有缺口的图,另外这两张图都是打散的,需要先还原出原图,然后再逐像素对比两张图片就可以得到缺口位置。移动按钮看似简单,但如果只是简单的将按钮设置到目标位置,极验后台会返回“怪物吃了拼图”,因为该验证码系统会将按钮的移动轨迹提交到极验后台,并验证该轨迹是否像一个人类的行为,所以我们需要尽可能模拟出人类的拖动行为。 代码示例: # -*- coding: utf-8 -*- import logging import time import random import re import requests import

注意!crontab的环境变量并非用户环境变量

今天发现爬虫脚本的一个问题:“直接在shell下运行的话,爬SIPO网站的数据得到的是中文;但是在crontab中启动的脚本爬出来的数据却是英文。”想了好半天,怀疑是环境的问题,然后一查,果然有好多人提到。原来crontab的环境变量跟用户的环境变量是不一致的!!! 直接在用户shell下敲env命令,可以看到有一行LANG=zh_CN.UTF-8,而crontab默认的环境语言是英文的,所以可以在编辑crontab时加上语言这一行。如下:   2022.04.21 最近在 Oracle 云上搞了两台服务器,并且安装了 certbot 来自动更新证书,但每次 crontab 执行 /usr/bin/certbot renew –quiet 时都会报错。错误日志如下: certbot.errors.NoInstallationError: Could not find a

用 Python 装饰器写一个single instance

一、关于python的装饰器 python装饰器的形式有点像java的注解、用处有点像java的切面。可以简单的理解为一个函数如果被装饰器注解了,那么在运行该函数之前,会先调用装饰器函数。 具体的参考如下两篇文章: https://www.zhihu.com/question/26930016 http://www.cnblogs.com/rhcad/archive/2011/12/21/2295507.html 二、一个脚本单一实例运行 有时候我们会有这种需求,只允许某个程序在系统中只有一个运行实例,即不允许程序“多开”。 There are several common techniques including using semaphores. The one I see used

pytesseract识别验证码

验证码破解是做爬虫经常要面对的问题。对于一般字符串或者算式的验证码,可以使用网页截图,然后OCR识别的方式来识别出验证码字符串来。 网页截图可以使用selenium的save_screenshot()方法; 用PIL图像处理库来截取验证码图片; 用Tesseract来做OCR识别 要安装的python第三方库有:selenium、pillow(PIL)、pytesseract 要安装的软件有:selenium用的webdriver、pytesseract用的Tesseract 1. 网页截图并截取验证码 import selenium from PIL import Image … fileScreenshot = "截屏文件保存路径" fileCaptcha =

Scroll to Top