php采集、DOM操作
phpQuery
https://blog.csdn.net/summerxiachen/article/details/78681674
https://www.php.cn/faq/568108.html
http://code.google.com/p/phpquery/
http://phpquery-library.blogspot.com/
require_once './phpQuery.php'; phpQuery::newDocumentFile($url); $title=pq('h1#activity-name')->text(); $author=pq("meta[name='author']")->attr('content'); $summary=pq("meta[name='description']")->attr('content'); $content=pq('div#js_content')->html();
QueryList 基于 phpQuery 实现
https://querylist.cc/
https://github.com/jae-jae/querylist
composer
https://www.phpcomposer.com/
composer中文文档
https://docs.phpcomposer.com/
Linux下面如何查看CPU,磁盘,内存,网络等资源使用情况
参考:https://blog.csdn.net/qq_21891743/article/details/131390588
top 命令是Linux系统下一个常用的命令行工具,用于实时监视系统中运行的进程和资源的使用情况。可以通过top命令查看CPU、内存、进程等系统资源的占用情况。
free -h 命令用于显示系统的物理内存和交换空间使用情况,可以方便地查看系统中的内存和交换分区的使用情况。
df -h 命令用于显示分区和文件系统的信息。
php允许跨域设置
转自:https://www.yisu.com/zixun/604851.html
php设置允许跨域访问可以有三种方式,具体方法如下所示:
方式一:
header("Access-Control-Allow-Origin: *");//允许所有地址跨域请求
header("Access-Control-Allow-Origin: http://localhost:8080");//指定某个地址可以跨域请求,这里只能指定一个
方式三:如果要允许多个地址跨域请求可以这样写
$origin = ['http://localhost:8080','http://localhost:8081'];
$AllowOrigin = 'http://localhost:8080';
if(in_array($_SERVER["HTTP_ORIGIN"],$origin)) {
$AllowOrigin = $_SERVER["HTTP_ORIGIN"];
}
header("Access-Control-Allow-Origin: ".$AllowOrigin );
设置允许的请求方法,可以用*表示所有,header("Access-Control-Allow-Methods: POST");
如果允许请求携带cookie,此时 origin配置不能用 *,此时前端似乎也要做配置,让请求中携带cookieheader('Access-Control-Allow-Credentials:true');
设置允许跨域的请求头,通常会在请求头里面加登录验证信息,那么服务端需要指定允许那些请求头,这里不能用*,多个字段用逗号隔开。header('Access-Control-Allow-Headers:token');
nginx伪静态配置
if ($uri !~ "^/manage\.php"){ set $rule_0 1$rule_0; } if (!-f $request_filename){ set $rule_0 2$rule_0; } if (!-d $request_filename){ set $rule_0 3$rule_0; } if ($rule_0 = "321"){ rewrite ^/(.*)$ /index.php/$1 last; }
我的web.config
<?xml version="1.0" encoding="UTF-8"?> <configuration> <system.webServer> <rewrite> <rules> <rule name="蜘蛛反弹" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAny"> <add input="{HTTP_USER_AGENT}" pattern="PetalBot" /> <add input="{HTTP_USER_AGENT}" pattern="Bytespider" /> <add input="{HTTP_USER_AGENT}" pattern="YisouSpider" /> <add input="{HTTP_USER_AGENT}" pattern="Yahoo\!\ Slurp" /> <add input="{HTTP_USER_AGENT}" pattern="EtaoSpider" /> <add input="{HTTP_USER_AGENT}" pattern="Applebot" /> <add input="{HTTP_USER_AGENT}" pattern="EasouSpider" /> <add input="{HTTP_USER_AGENT}" pattern="ia_archiver" /> <add input="{HTTP_USER_AGENT}" pattern="DoCoMo\ Spider" /> <add input="{HTTP_USER_AGENT}" pattern="DotBot" /> <add input="{HTTP_USER_AGENT}" pattern="AhrefsBot" /> <add input="{HTTP_USER_AGENT}" pattern="BDCbot" /> <add input="{HTTP_USER_AGENT}" pattern="DeuSu" /> <add input="{HTTP_USER_AGENT}" pattern="MJ12bot" /> <add input="{HTTP_USER_AGENT}" pattern="SEOkicks" /> <add input="{HTTP_USER_AGENT}" pattern="YandexBot" /> <add input="{HTTP_USER_AGENT}" pattern="DomainCrawler" /> <add input="{HTTP_USER_AGENT}" pattern="Qwantify" /> <add input="{HTTP_USER_AGENT}" pattern="seznambot" /> <add input="{HTTP_USER_AGENT}" pattern="BUbiNG" /> <add input="{HTTP_USER_AGENT}" pattern="aiHitBot" /> <add input="{HTTP_USER_AGENT}" pattern="SiteExplorer" /> <add input="{HTTP_USER_AGENT}" pattern="ExtLinksBot" /> <add input="{HTTP_USER_AGENT}" pattern="spbot" /> <add input="{HTTP_USER_AGENT}" pattern="netEstate\ NE\ Crawler" /> <add input="{HTTP_USER_AGENT}" pattern="AlphaBot" /> <add input="{HTTP_USER_AGENT}" pattern="MegaIndex\.ru" /> <add input="{HTTP_USER_AGENT}" pattern="MauiBot" /> <add input="{HTTP_USER_AGENT}" pattern="Daum" /> <add input="{HTTP_USER_AGENT}" pattern="YaK\/1\.0" /> <add input="{HTTP_USER_AGENT}" pattern="BLEXBot" /> <add input="{HTTP_USER_AGENT}" pattern="SemrushBot" /> <add input="{HTTP_USER_AGENT}" pattern="serpstatbot" /> <add input="{HTTP_USER_AGENT}" pattern="Nimbostratus-Bot" /> <add input="{HTTP_USER_AGENT}" pattern="Adsbot" /> <add input="{HTTP_USER_AGENT}" pattern="vxiaotou-spider" /> <add input="{HTTP_USER_AGENT}" pattern="CensysInspect" /> <add input="{HTTP_USER_AGENT}" pattern="Barkrowler" /> <add input="{HTTP_USER_AGENT}" pattern="DataForSeoBot" /> <add input="{HTTP_USER_AGENT}" pattern="SeekportBot" /> <add input="{HTTP_USER_AGENT}" pattern="coccocbot" /> <add input="{HTTP_USER_AGENT}" pattern="Neevabot" /> <add input="{HTTP_USER_AGENT}" pattern="t3versionsBot" /> <add input="{HTTP_USER_AGENT}" pattern="YaoSouBot" /> </conditions> <action type="Redirect" url="http://{REMOTE_ADDR}/{R:1}" redirectType="Found" /> </rule> <rule name="已导入的规则 2" stopProcessing="true"> <match url="^(.*)$" ignoreCase="false" /> <conditions logicalGrouping="MatchAll"> <add input="{REQUEST_FILENAME}" matchType="IsFile" ignoreCase="false" negate="true" /> <add input="{REQUEST_FILENAME}" matchType="IsDirectory" ignoreCase="false" negate="true" /> <add input="{R:1}" pattern="\.(hqx|cpt|csv|bin|dms|lha|lzh|exe|class|psd|so|sea|dll|oda|pdf|ai|eps|ps|smi|smil|mif|xls|ppt|pptx|wbxml|wmlc|dcr|dir|dxr|dvi|gtar|gz|gzip|php4|php3|phtml|phps|js|swf|sit|tar|tgz|z|xhtml|xht|zip|rar|mid|midi|mpga|mp2|mp3|aif|aiff|aifc|ram|rm|rpm|ra|rv|wav|bmp|gif|jpeg|jpg|jpe|jp2|j2k|jpf|jpg2|jpx|jpm|mj2|mjp2|png|tiff|tif|heic|heif|css|htm|shtml|txt|text|log|rtx|rtf|xml|xsl|mpeg|mpg|mpe|qt|mov|avi|movie|doc|docx|dot|dotx|xlsx|word|xl|eml|json|pem|p10|p12|p7a|p7c|p7m|p7r|p7s|crt|crl|der|kdb|pgp|gpg|sst|csr|rsa|cer|3g2|3gp|mp4|m4a|f4v|flv|webm|aac|m4u|m3u|xspf|vlc|wmv|au|ac3|flac|ogg|kmz|kml|ics|ical|zsh|7z|7zip|cdr|wma|jar|svg|vcf|srt|vtt|ico|odc|otc|odf|otf|odg|otg|odi|oti|odp|otp|ods|ots|odt|odm|ott|oth)$" negate="true" /> </conditions> <action type="Rewrite" url="index.php/{R:1}" /> </rule> </rules> <outboundRules> <rule name="AddCrossDomain"> <match serverVariable="RESPONSE_Access_Control_Allow_Origin" pattern=".*" /> <conditions logicalGrouping="MatchAll" trackAllCaptures="true"> <add input="{HTTP_ORIGIN}" pattern="(https?://((www\.)?abc\.com|(www\.)?abc\.cn))" /> </conditions> <action type="Rewrite" value="{C:0}" /> </rule> </outboundRules> </rewrite> </system.webServer> </configuration>
最后部分是允许跨站设置
Linux目录详解
转自:https://w3h5.com/post/336.html
我们应该知道 Windows 有一个默认的安装目录专门用来安装软件。Linux 的软件安装目录也应该是有讲究的,遵循这一点,对后期的管理和维护也是有帮助的。
/usr
系统级的目录,可以理解为 C:/Windows/
/usr/lib
可理解为 C:/Windows/System32
/usr/local
用户级的程序目录,可以理解为 C:/Progrem Files/
。用户自己编译的软件默认会安装到这个目录下。
/opt
用户级的程序目录,可以理解为 D:/Software
, opt
有可选的意思,这里可以用于放置第三方大型软件(或游戏),当你不需要时,直接 rm -rf
掉即可。
在硬盘容量不够时,也可将 /opt
单独挂载到其他磁盘上使用。
源码放哪里?
/usr/src
系统级的源码目录。
/usr/local/src
用户级的源码目录。
拓展:
/opt
Here's where optional stuff is put. Trying out the latest Firefox beta? Install it to /opt where you can delete it without affecting other settings. Programs in here usually live inside a single folder whick contains all of their data, libraries, etc.
这里主要存放那些可选的程序。你想尝试最新的firefox测试版吗?那就装到/opt目录下吧,这样,当你尝试完,想删掉firefox的时候,你就可 以直接删除它,而不影响系统其他任何设置。安装到/opt目录下的程序,它所有的数据、库文件等等都是放在同个目录下面。
举个例子:刚才装的测试版firefox,就可以装到/opt/firefox_beta目录下,/opt/firefox_beta目录下面就包含了运 行firefox所需要的所有文件、库、数据等等。要删除firefox的时候,你只需删除/opt/firefox_beta目录即可,非常简单。
/usr/local
This is where most manually installed(ie. outside of your package manager) software goes. It has the same structure as /usr. It is a good idea to leave /usr to your package manager and put any custom scripts and things into /usr/local, since nothing important normally lives in /usr/local.
这里主要存放那些手动安装的软件,即不是通过"新立得"或apt-get安装的软件。它和/usr目录具有相类似的目录结构。让软件包管理器来管理/usr目录,而把自定义的脚本(scripts)放到/usr/local目录下面,我想这应该是个不错的主意。
常用目录及用途
/bin
存放二进制可执行文件(ls,cat,mkdir等),常用命令一般都在这里。
/etc
存放系统管理和配置文件
/home
存放所有用户文件的根目录,是用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
/usr
用于存放系统应用程序,比较重要的目录/usr/local 本地系统管理员软件安装目录(安装系统级的应用)。这是最庞大的目录,要用到的应用程序和文件几乎都在这个目录。
/usr/x11r6
存放x window的目录
/usr/bin
众多的应用程序
/usr/sbin
超级用户的一些管理程序
/usr/doc
linux文档
/usr/include
linux下开发和编译应用程序所需要的头文件
/usr/lib
常用的动态链接库和软件包的配置文件
/usr/man
帮助文档
/usr/src
源代码,linux内核的源代码就放在/usr/src/linux里
/usr/local/bin
本地增加的命令
/usr/local/lib
本地增加的库
/opt
额外安装的可选应用程序包所放置的位置。一般情况下,我们可以把tomcat等都安装到这里。
/proc
虚拟文件系统目录,是系统内存的映射。可直接访问这个目录来获取系统信息。
/root
超级用户(系统管理员)的主目录(特权阶级^o^)
/sbin
存放二进制可执行文件,只有root才能访问。这里存放的是系统管理员使用的系统级别的管理命令和程序。如ifconfig等。
/dev
用于存放设备文件。
/mnt
系统管理员安装临时文件系统的安装点,系统提供这个目录是让用户临时挂载其他的文件系统。
/boot
存放用于系统引导时使用的各种文件
/lib
存放跟文件系统中的程序运行所需要的共享库及内核模块。共享库又叫动态链接共享库,作用类似windows里的.dll文件,存放了根文件系统程序运行所需的共享文件。
/tmp
用于存放各种临时文件,是公用的临时文件存储点。
/var
用于存放运行时需要改变数据的文件,也是某些大文件的溢出区,比方说各种服务的日志文件(系统启动日志等。)等。
/lost+found
每个分区默认都有一个 lost+found
目录,用来存放 fsck 过程中部分修复的文件的。
lodop打印控件-关于谷歌Chrome浏览器94版跨域问题的解决方案
谷歌浏览器再次迈出激进安全步骤,Win10+Chrome94版阻断http页面访问localhost服务, 这一举动广泛影响了Web模式的设备管理系统,例如路由服务、打印服务等,其中也包括C-Lodop软件。 安全是个美好的托词,真正让谷歌贸然行动的动机是大力推广https协议,而https背后是TLS证书, TLS证书背后是浏览器厂商的年费分成,利益巨大...闲话少说,解决方案如下:
有四种方法,选其一就行:
一、网站改用HTTPS方式(彻底方案)
二、安装最新的C-Lodop6.564及后版本,并更新LodopFuncs.js文件;
三、手动修改客户浏览器安全设置,在Chrome地址栏输入:chrome://flags/#block-insecure-private-network-requests
看到底色泛黄的“Block insecure...”项的 Default 值,改选成 Disabled然后窗口下方会出现蓝底的Relaunch按钮,点它重启浏览器。
四、客户端改用低版本Chrome(94版前)浏览器,简单办法是安装360急速版(Chrome内核)
注:微软的浏览器Edge94版因为采用了Chrome内核,故以上解决方案也适用。
系统存在支持SSL中等强度密码套件(SWEET32)
转自:https://blog.csdn.net/qq_38254635/article/details/128400965
gpedit.msc 》 计算机配置 》管理模板》网络》SSL配置设置》SSL密码套件顺序》启用
TLS_AES_256_GCM_SHA384、TLS_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384、TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256、TLS_DHE_RSA_WITH_AES_256_GCM_SHA384、TLS_DHE_RSA_WITH_AES_128_GCM_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256、TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA、TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_AES_256_GCM_SHA384、TLS_RSA_WITH_AES_128_GCM_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA256、TLS_RSA_WITH_AES_128_CBC_SHA256、TLS_RSA_WITH_AES_256_CBC_SHA、TLS_RSA_WITH_AES_128_CBC_SHA、TLS_RSA_WITH_3DES_EDE_CBC_SHA、TLS_RSA_WITH_NULL_SHA256、TLS_RSA_WITH_NULL_SHA、TLS_PSK_WITH_AES_256_GCM_SHA384、TLS_PSK_WITH_AES_128_GCM_SHA256、TLS_PSK_WITH_AES_256_CBC_SHA384、TLS_PSK_WITH_AES_128_CBC_SHA256、TLS_PSK_WITH_NULL_SHA384、TLS_PSK_WITH_NULL_SHA256
改为:
TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA_P384,TLS_DHE_RSA_WITH_AES_256_GCM_SHA384,TLS_DHE_RSA_WITH_AES_128_GCM_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256_P384,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA_P384,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P256,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA_P384,TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,TLS_DHE_DSS_WITH_AES_256_CBC_SHA,TLS_DHE_DSS_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA
重启系统,即可。
检查方法:
下载安全 nmap-7.93-setup.exe。
安装好之后,Win + R 输入 cmd,假设要检测的域名是 xxx.com
输入:nmap -sV --script ssl-enum-ciphers -p 443 xxx.com
没问题时如下图:
下图是有问题的情况:
MySQL数据库开启审计功能
来源:https://www.shuzhiduo.com/A/kvJ3wgegJg/
数据库审计主要用于监视并记录对数据库服务器的各类操作行为,并记入审计日志或数据库中以便日后进行跟踪、查询、分析,以实现对用户操作的监控和审计。审计是一项非常重要的工作,也是企业数据安全体系的重要组成部分。
1、查看General Log开启情况:执行SQL命令show variables like '%general_log%' ;可以看到默认general_log是OFF的
2、开启General Log: 执行SQL命令set global general_log=on 而后查看general_log打开了
3、验证:general_log打开后,所有SQL的访问都会记录在general_log_file指向的日志文件。
开启General Log只要用户执行了操作,无论对错,MySQL就会记录日志,这样的话日志量会非常庞大,对数据库效率有影响。所以我们一般不建议开启开功能,个别情况下可能会临时的开一段时间以供排查故障等使用。对于生产环境中任务繁重的MySOL数据库,启用审计会引起服务器的高昂成本,因此建议采用第三方数据库审计产品收集审计记录。
layui自动触发select事件
来源:https://toscode.gitee.com/layui/layui/issues/I5JMRW
$(obj).siblings("div.layui-form-select").find("dl dd[lay-value='"+value+"']").click();