Halo博客安全配置

全站强制https

server {
    listen 80;
    server_name www.codehome.vip;

    #强制将http的URL重写成https
    rewrite ^(.*) https://$server_name$1 permanent;
    }

    server {
        server_name  www.codehome.vip;
        listen       443 ssl;
        ssl_certificate      /usr/local/ssl/codehome.crt;
        ssl_certificate_key  /usr/local/ssl/codehome.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header X-Forwarded-For    $proxy_add_x_forwarded_for;
            proxy_pass http://localhost:1111/;
        }
    }

隐藏服务器信息

在http标签中加入下面指令隐藏nginx版本与自定义返回Server

server_tokens off;
add_header Server 'Zhan-Sir-Server' always;

禁止网页通过iframe嵌套

X-Frame-Options 有三个值:
DENY:表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。
SAMEORIGIN:表示该页面可以在相同域名页面的 frame 中展示。
ALLOW-FROM uri表示该页面可以在指定来源的 frame 中展示。

add_header X-Frame-OPTIONS "SAMEORIGIN";

禁用不安全的方法

在server标签中加入,判断请求方法是不是在GET、HEAD、POST范围内,其他的禁止
,halo使用的rest风格的,这些就不开启了。😕

if ($request_method !~ ^(GET|HEAD|POST)$) {
    return 403;
}

图片添加水印跟压缩

下载nginx源码NGINX-IMAGE-FILTER-WATERMARK项目页下载源码包。解压完成后把 ngx_http_image_filter_module.c 文件覆盖到 NGINX 源码中,目录是 /src/http/modules/ngx_http_image_filter_module.c,重新编译nginx。我这里是重新编译,只需要make,把objs下的nginx覆盖原先nginx/sbin下的nginx即可。

./configure --prefix=/usr/local/nginx --with-pcre --with-http_ssl_module --with-http_v2_module --with-http_realip_module --with-http_addition_module --with-http_sub_module --with-http_dav_module --with-http_flv_module --with-http_mp4_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_random_index_module --with-http_secure_link_module --with-http_stub_status_module --with-http_auth_request_module --with-http_image_filter_module --with-http_slice_module --with-mail --with-threads --with-file-aio --with-stream --with-mail_ssl_module --with-stream_ssl_module
make

nginx添加配置代理upload路径下的图片,这里要重名下根目录地址。

location ^~ /upload/ {   #在img目录下开启水水印,可改成主目录
image_filter watermark;  #开启水印
image_filter_watermark "PATH_TO_FILE";   #水印文件位置
image_filter_watermark_position bottom-right;   #水印位置
image_filter_jpeg_quality   95;   #图片质量
image_filter_buffer         10M;   #缓存
image_filter_watermark_width_from 400;   # 打水印的图片最小宽度,只有大于这个宽度的才会打水印
image_filter_watermark_height_from 400;  #打水印的图片最小高度,只有大于这个高度的才会打水印
alias /xx/xxx/attachments/upload/; #halo的本地上传路径
}

防止反代

在halo的主题里面全局放置一个隐藏的图片,当检测到域名不是本站的域名,自动跳转到本站。

<img style="display:none" src=" " onerror='this.onerror=null;var currentDomain="www.codehome." + "vip"; var str1=currentDomain; str2="docu"+"ment.loca"+"tion.host"; str3=eval(str2) ;if( str1!=str3 ){ do_action = "loca" + "tion." + "href = loca" + "tion.href" + ".rep" + "lace(docu" +"ment"+".loca"+"tion.ho"+"st," + "currentDomain" + ")";eval(do_action) }' />

防范一般爬虫

在nginx的配置目录新建ua_deny.conf文件,最后在nginx.conf标签中include ua_deny.conf引入即可。

#禁止Scrapy等工具的抓取
if ($http_user_agent ~* (Scrapy|Curl|HttpClient)) {
  return 444;
}
#禁止指定UA及UA为空的访问
if ($http_user_agent ~ "FeedDemon|JikeSpider|Indy Library|Alexa Toolbar|AskTbFXTV|AhrefsBot|CrawlDaddy|CoolpadWebkit|Java|Feedly|UniversalFeedParser|ApacheBench|Microsoft URL Control|Swiftbot|ZmEu|oBot|jaunty|Python-urllib|lightDeckReports Bot|YYSpider|DigExt|YisouSpider|HttpClient|MJ12bot|heritrix|EasouSpider|LinkpadBot|Ezooms|^$" )
{
  return 444;
} 
#这三句if是禁止使用代理ip来访问,或禁止使用压力测试软件进行dos攻击
if ($http_user_agent ~* ApacheBench|WebBench|java/){
                return 444;
}
if ($http_user_agent ~* (Wget|ab) ) {
   return 444;
}
 
if ($http_user_agent ~* LWP::Simple|BBBike|wget) {
            return 444;
}
文章作者: 编程之家
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 编程之家
逆向与安全 Web安全 nginx
喜欢就支持一下吧