wordpress禁止恶意HTTP_USER_AGENT,防采集防部分攻击 | wordpress主题

mikel阅读(1041)

来源: wordpress禁止恶意HTTP_USER_AGENT,防采集防部分攻击 | wordpress主题

教程介绍

首先我们不得不感谢奶嘴大神给我们带来的精心教程,来自wordpress禁止恶意HTTP_USER_AGENT,防采集防部分攻击的说明,小2觉得很使用,就转载过来了,感谢奶嘴大神为wordpress方面所做出的贡献,怪不得WP.COM要把奶嘴挖去做中国区域的维护人话。。。好啦,下面我们说说今天这个教程的主题内容吧

我们要想知道一个用户的访问意图,可以通过HTTP_USER_AGENT来获取,而一般的正常访客是HTTP_USER_AGENT表示也是很常规的,这里就不说什么了,我们要说的是,哪些HTTP_USER_AGENT是采集软件或者恶意攻击者所具备的标识呢?那么下面的一串代码就可以解决我们的疑惑

  1. $ua = $_SERVER[‘HTTP_USER_AGENT’];
  2. $now_ua = array(‘FeedDemon ‘,’ZmEu’,’Indy Library’,’oBot’,’jaunty’); //将恶意USER_AGENT存入数组
  3. if(!$ua) { //禁止空USER_AGENT,dedecms等主流采集程序都是空USER_AGENT,部分SQL注入工具也是空USER_AGENT
  4. header(“Content-type: text/html; charset=utf-8”);
  5. wp_die(‘请勿采集本站,因为采集的站长木JJ!’);
  6. }else{
  7.     foreach($now_ua as $value )
  8.     if(eregi($value,$ua)) {
  9.     header(“Content-type: text/html; charset=utf-8”);
  10.     wp_die(‘请勿采集本站,因为采集的站长木JJ!’);
  11.     }
  12. }

将上面的代码放到wordpress主题文件夹的functios.php里面,即可,$now_ua里面的数组就代表着目前较为常规的恶意采集软件类的HTTP_USER_AGENT标识!

User Agent公布列表

FeedDemon 内容采集
BOT/0.1 (BOT for JCE) SQL注入
CrawlDaddy SQL注入
Java 内容采集
Jullo 内容采集
Feedly 内容采集
UniversalFeedParser 内容采集
ApacheBench cc攻击器
Swiftbot 爬虫
YandexBot 爬虫
AhrefsBot 爬虫
YisouSpider 爬虫
jikeSpider 爬虫
MJ12bot 爬虫
ZmEu phpmyadmin漏洞扫描
WinHttp 采集cc攻击
EasouSpider 爬虫
HttpClient tcp攻击
Microsoft URL Control 扫描
YYSpider 爬虫
jaunty wordpress爆破扫描器
oBot 爬虫
Python-urllib 内容采集
Indy Library 扫描
FlightDeckReports Bot 爬虫

大家可以根据上面的User Agent公布列表自由的在代码里拓展所屏蔽的User Agent值!

最后还是感谢奶嘴大神的教程!

[WordPress]wordpress防止xmlrpc.php大量消耗服务器资源

mikel阅读(1260)

最近发现访问自己的blog网站的时候,变的很慢,有时候居然无法响应;
到服务器跟踪了下访问日志,有大量的提交到xmlrpc.php的操作,ip地址也是不段变化中.

搜索了下看原理可以利用此漏洞文件进行http的DDOS攻击,还有可能被破解用户口令密码.
也没有什么高招 ,只是 删除文件或者拒绝访问即可(至少不再消耗php解析资源)
解决办法:

方法一:删除或者改个名字即可 xmlrpc.php –> newxmlrpc.php (反正让它不存在)

方法二:在nginx服务器配置文件 加

location ~* /xmlrpc.php {
deny all;
}

计算机图形学、数字图像处理、计算机视觉之间的区别与联系 - lauzhishuai - 博客园

mikel阅读(761)

来源: 计算机图形学、数字图像处理、计算机视觉之间的区别与联系 – lauzhishuai – 博客园

三者之间既有区别,又有联系,不确切的描述:

计算机图形学≈画图

计算机视觉≈看图

数字图像处理≈看图前沐浴更衣焚香做好各种仪式,然后再看图

计算机图形学(Computer Graphics)讲的是图形,也就是图形的构造方式,是一种从无到有的概念,从数据得到图像。是给定关于景象结构、表面反射特性、光源配置及相机模型的信息,生成图像。

计算机视觉(Computer Vision)是给定图象,从图象提取信息,包括景象的三维结构,运动检测,识别物体等。 

数字图像处理(Digital Image Processing)是对已有的图像进行变换、分析、重构,得到的仍是图像。

模式识别(PR)本质就是分类,根据常识或样本或二者结合进行分类,可以对图像进行分类,从图像得到数据。

Computer Graphics和Computer Vision是同一过程的两个方向。Computer Graphics将抽象的语义信息转化成图像,Computer Vision从图像中提取抽象的语义信息。Image Processing探索的是从一个图像或者一组图像之间的互相转化和关系,与语义信息无关。总之,计算机图形学是计算机视觉的逆问题,两者从最初相互独立的平行发展到最近的融合是一大趋势。图像模式的分类是计算机视觉中的一个重要问题,模式识别中的许多方法可以应用于计算机视觉中。

区别:
Computer Graphics,简称 CG 。输入的是对虚拟场景的描述,通常为多边形数组,而每个多边形由三个顶点组成,每个顶点包括三维坐标、贴图坐标、rgb颜色等。输出的是图像,即二维像素数组。
Computer Vision,简称 CV。输入的是图像或图像序列,通常来自相机或usb摄像头。输出的是对于图像序列对应的真实世界的理解,比如检测人脸、识别车牌。
Digital Image Processing,简称 DIP。输入的是图像,输出的也是图像。Photoshop中对一副图像应用滤镜就是典型的一种图像处理。常见操作有模糊、灰度化、增强对比度等。

联系:
CG 中也会用到 DIP,现今的三维游戏为了增加表现力都会叠加全屏的后期特效,原理就是 DIP,只是将计算量放在了显卡端。
CV 更是大量依赖 DIP 来打杂活,比如对需要识别的照片进行预处理。
最后还要提到近年来的热点——增强现实(AR),它既需要 CG,又需要 CV,当然也不会漏掉 DIP。它用 DIP 进行预处理,用 CV 进行跟踪物体的识别与姿态获取,用 CG 进行虚拟三维物体的叠加。

简单点说:1 计算机视觉,里面人工智能的东西更多一些,不仅仅是图像处理的知识,还涵盖了人工智能,机器学习等领域知识;2,计算机图形学,主要涉及图形成像及游戏类开发,如opengl等,还有就是视频渲染等;3,图像处理,这个主要针对图像图像的基本处理,如图像检索或则图像识别,压缩,复原等等操作。

 

计算机图形学和数字图像处理是比较老的技术。计算机视觉要迟几十年才提出。
计算机图形学和数字图像处理的区别在于图形和图像。
图形是矢量的、纯数字式的。图像常常由来自现实世界的信号产生,有时也包括图形。
而图像和图形都是数据的简单堆积,图像是像素的叠加,图形则是基本图元的叠加。计算机视觉要从图像中整理出一些信息或统计数据,也就是说要对计算机图像作进一步的分析。计算机图形学的研究成果可以用于产生数字图像处理所需要的素材,计算机视觉需要以数字图像处理作为基础。计算机视觉与数字图像处理的这种关系类似于物理学和数学的关系。

另外,如果不是浙江大学的或者中科院计算所的,不建议做计算机图形学这一方向,难度太大(图形比图像虽然表面上只高一维,但实际上工作量大了好多倍;其次,图像,国内外差距目前已经很小,好发重要期刊;图形,除上面两个单位和微软外,国内外差距很大,不好发重要期刊)

数字图像处理主要是对已有的图像,比如说可见光的图像、红外图像、雷达成像进行噪声滤除、边缘检测、图像恢复等处理,就像用ps 处理照片一样的。人脸识别啊、指纹识别啊、运动物体跟踪啊,都属于图像处理。去噪有各种滤波算法;其他的有各种时频变化算法,如傅里叶变化,小波变换等,有很多这方面的书籍。
图形学主要研究如何生成图形的,像用autoCAD作图,就是图形学中算法的应用。各种动漫软件中图形算法的生成等。

计算机图形学、数字图像处理、计算机视觉之间的区别与联系 - lauzhishuai - 博客园

mikel阅读(1117)

来源: 计算机图形学、数字图像处理、计算机视觉之间的区别与联系 – lauzhishuai – 博客园

三者之间既有区别,又有联系,不确切的描述:

计算机图形学≈画图

计算机视觉≈看图

数字图像处理≈看图前沐浴更衣焚香做好各种仪式,然后再看图

计算机图形学(Computer Graphics)讲的是图形,也就是图形的构造方式,是一种从无到有的概念,从数据得到图像。是给定关于景象结构、表面反射特性、光源配置及相机模型的信息,生成图像。

计算机视觉(Computer Vision)是给定图象,从图象提取信息,包括景象的三维结构,运动检测,识别物体等。 

数字图像处理(Digital Image Processing)是对已有的图像进行变换、分析、重构,得到的仍是图像。

模式识别(PR)本质就是分类,根据常识或样本或二者结合进行分类,可以对图像进行分类,从图像得到数据。

Computer Graphics和Computer Vision是同一过程的两个方向。Computer Graphics将抽象的语义信息转化成图像,Computer Vision从图像中提取抽象的语义信息。Image Processing探索的是从一个图像或者一组图像之间的互相转化和关系,与语义信息无关。总之,计算机图形学是计算机视觉的逆问题,两者从最初相互独立的平行发展到最近的融合是一大趋势。图像模式的分类是计算机视觉中的一个重要问题,模式识别中的许多方法可以应用于计算机视觉中。

区别:
Computer Graphics,简称 CG 。输入的是对虚拟场景的描述,通常为多边形数组,而每个多边形由三个顶点组成,每个顶点包括三维坐标、贴图坐标、rgb颜色等。输出的是图像,即二维像素数组。
Computer Vision,简称 CV。输入的是图像或图像序列,通常来自相机或usb摄像头。输出的是对于图像序列对应的真实世界的理解,比如检测人脸、识别车牌。
Digital Image Processing,简称 DIP。输入的是图像,输出的也是图像。Photoshop中对一副图像应用滤镜就是典型的一种图像处理。常见操作有模糊、灰度化、增强对比度等。

联系:
CG 中也会用到 DIP,现今的三维游戏为了增加表现力都会叠加全屏的后期特效,原理就是 DIP,只是将计算量放在了显卡端。
CV 更是大量依赖 DIP 来打杂活,比如对需要识别的照片进行预处理。
最后还要提到近年来的热点——增强现实(AR),它既需要 CG,又需要 CV,当然也不会漏掉 DIP。它用 DIP 进行预处理,用 CV 进行跟踪物体的识别与姿态获取,用 CG 进行虚拟三维物体的叠加。

简单点说:1 计算机视觉,里面人工智能的东西更多一些,不仅仅是图像处理的知识,还涵盖了人工智能,机器学习等领域知识;2,计算机图形学,主要涉及图形成像及游戏类开发,如opengl等,还有就是视频渲染等;3,图像处理,这个主要针对图像图像的基本处理,如图像检索或则图像识别,压缩,复原等等操作。

 

计算机图形学和数字图像处理是比较老的技术。计算机视觉要迟几十年才提出。
计算机图形学和数字图像处理的区别在于图形和图像。
图形是矢量的、纯数字式的。图像常常由来自现实世界的信号产生,有时也包括图形。
而图像和图形都是数据的简单堆积,图像是像素的叠加,图形则是基本图元的叠加。计算机视觉要从图像中整理出一些信息或统计数据,也就是说要对计算机图像作进一步的分析。计算机图形学的研究成果可以用于产生数字图像处理所需要的素材,计算机视觉需要以数字图像处理作为基础。计算机视觉与数字图像处理的这种关系类似于物理学和数学的关系。

另外,如果不是浙江大学的或者中科院计算所的,不建议做计算机图形学这一方向,难度太大(图形比图像虽然表面上只高一维,但实际上工作量大了好多倍;其次,图像,国内外差距目前已经很小,好发重要期刊;图形,除上面两个单位和微软外,国内外差距很大,不好发重要期刊)

数字图像处理主要是对已有的图像,比如说可见光的图像、红外图像、雷达成像进行噪声滤除、边缘检测、图像恢复等处理,就像用ps 处理照片一样的。人脸识别啊、指纹识别啊、运动物体跟踪啊,都属于图像处理。去噪有各种滤波算法;其他的有各种时频变化算法,如傅里叶变化,小波变换等,有很多这方面的书籍。
图形学主要研究如何生成图形的,像用autoCAD作图,就是图形学中算法的应用。各种动漫软件中图形算法的生成等。

微信小程序中使用Promise进行异步流程处理 - 微信小程序开发联盟 - SegmentFault

mikel阅读(1113)

来源: 微信小程序中使用Promise进行异步流程处理 – 微信小程序开发联盟 – SegmentFault

我们知道,JavaScript是单进程执行的,同步操作会对程序的执行进行阻塞处理。比如在浏览器页面程序中,如果一段同步的代码需要执行很长时间(比如一个很大的循环操作),则页面会产生卡死的现象。

所以,在JavaScript中,提供了一些异步特性,为程序提供了性能和体验上的益处,比如可以将代码放到setTimeout()中执行;或者在网页中,我们使用Ajax的方式向服务器端做异步数据请求。这些异步的代码不会阻塞当前的界面主进程,界面还是可以灵活的进行操作,等到异步代码执行完成,再做相应的处理。

一段典型的异步代码类似这样:

function asyncFunc(callback) {
  setTimeout(function () {
    //在这里写你的逻辑代码
    //...

    //逻辑代码结束,执行一个回调函数
    callback();
  }, 5000);
}

或者:

function getAccountInfo(callback, errorCallback) {
  wx.request({
    url: '/accounts/12345',
    success: function (res) {
      //...
      callback(data);
    },
    fail: function (res) {
      //...
      errorCallback(data);
    }
  });
}

然后我们这样调用:

asyncFunc(function () {
  console.log("asyncFunc() run complete");
});

getAccountInfo(function (data) {
  console.log("get account info successfully:", data);
}, function () {
  console.error("get account info failed");
});

这是一种使用了回调函数来控制代码执行流程的方式。这样看起来没问题,也挺容易理解。

但是,如果我们一段代码中,异步操作太多,又要保证这些异步操作是有顺序的执行,那我们的代码就看起来非常糟糕,就像这样:

asyncFunc1(function(){
  //...
  asyncFunc2(function(){
    //...
    asyncFunc3(function(){
      //...
      asyncFunc4(function(){
        //...
        asyncFunc5(function(){
           //...
        });
      });
    });
  });
});

这样的代码可读性和可维护性可想而知了。还有,回调函数真正的问题在于:

它剥夺了我们使用 return 和 throw 这些关键字的能力。那有什么办法来改善这个问题呢?答案是肯定的,Promise这种概念的产生,很好地解决了这一切。关于什么是Promise,一搜一大把介绍,我这里就不复制粘贴了,我主要是讲一下我们怎么用它来解决我们的问题。

我们来看一下,上面的例子如果使用Promise,它会是什么样子?我们先将这些函数变成Promise的方式:

function asyncFunc1(){
  return new Promise(function (resolve, reject) {
    //...
  })
}

// asyncFunc2,3,4,5也实现成跟asyncFunc1一样的方式…然后看一下他们是怎么样被调用的:

asyncFunc1()
  .then(asyncFunc2)
  .then(asyncFunc3)
  .then(asyncFunc4)
  .then(asyncFunc5);

这样,这些异步函数就会按照顺序一个一个依次执行了。

ES6中原生支持了Promise,不过在原生不支持Promise的环境中,我们有很多第三方库来支持,比如Q.js和Bluebird。它们一般都除了提供标准Promise的API外,还提供了一些标准之外但非常有用的API,使得异步流程的控制更加优雅。

从微信小程序的API文档中我们可以看到,框架提供的JavaScript API中很多函数其实都是异步的,如wx.setStorage(), wx.getStorage(), wx.getLocation()等等,它们也是提供的回调的处理方式,在参数中传入success, fail,complete回调函数,就可以对运行成功或失败进行分别处理。

如:

wx.getLocation({ 
  type: 'wgs84', 
  success: function(res) { 
    var latitude = res.latitude 
    var longitude = res.longitude 
    var speed = res.speed 
    var accuracy = res.accuracy 
  },
  fail: function() {
    console.error("get location failed")
  }
})

我们能不能让微信小程序的异步API支持Promise呢?答案是肯定的,我们当然可以一个一个的用Promise去包装这些API,但是这个还是比较麻烦的。不过,由于小程序的API的参数格式都比较统一,只接受一个object参数,回调都是在这个参数中设置,所以,这为我们的统一处理提供了便利,我们可以写一个非侵入性的工具方法,来完成这样的工作:

假设我们将这个工具方法写到一个名为的util.js的文件中:

var Promise = require('../libs/bluebird.min')  //我用了bluebird.js

function wxPromisify(fn) {  
  return function (obj = {}) {    
    return new Promise((resolve, reject) => {      
      obj.success = function (res) {        
        resolve(res)      
      }      

      obj.fail = function (res) {        
        reject(res)      
      }      

      fn(obj)    
    })  
  }
}

module.exports = {  
  wxPromisify: wxPromisify
}

之后,我们来看一下如何使用这个方法,将原来回调方式的API变成Promise的方式:

var util = require('../utils/util')

var getLocationPromisified = util.wxPromisify(wx.getLocation)

getLocationPromisified({
  type: 'wgs84'
}).then(function (res) {
  var latitude = res.latitude 
  var longitude = res.longitude 
  var speed = res.speed 
  var accuracy = res.accuracy 
}).catch(function () {
  console.error("get location failed")
})

是不是很容易理解?

关于使用Promise处理异步流程,就先讲到这里,有什么疑问,可以留言给我。不对之处,欢迎指正。
相关阅读:
一斤代码深入理解系列《一》:微信小程序事件机制
一斤代码深入理解系列《二》:微信小程序样式机制
一斤代码深入理解系列《三》:微信小程序和服务器通信

微信小程序 warning: Now you can provide attr "wx:key" for a "wx:for" to improve performance.

mikel阅读(2099)

 

来源: 微信小程序 wx:key – 酸柠檬的博客 – 博客频道 – CSDN.NET

在实际开发过程中遇到 warning: Now you can provide attr “wx:key” for a “wx:for” to improve performance.

上网查找资料与查看官方文档发现原因大致如下:

官方解释:

wx:key

如果列表中项目的位置会动态改变或者有新的项目添加到列表中,并且希望列表中的项目保持自己的特征和状态(如 <input/> 中的输入内容,<switch/> 的选中状态),需要使用 wx:key 来指定列表中项目的唯一的标识符。


网上资料:

wx:key 的值以两种形式提供

1、wx:key=”property” 其中property是代表在 for 循环的 array 中 item 的某个 property,该 property 的值需要是列表中唯一的字符串或数字,且不能动态改变。类似于字典的key值

2、wx:key=”*this”, 保留关键字 *this 代表在 for 循环中的 item 本身,这种表示需要 item 本身是一个唯一的字符串或者数字,如:

当数据改变触发渲染层重新渲染的时候,会校正带有 key 的组件,框架会确保他们被重新排序,而不是重新创建,以确保使组

件保持自身的状态,并且提高列表渲染时的效率。

不添加wx:key情况:

<block wx:for-items=”{{userInfoList}}” >,会出现warning: Now you can provide attr “wx:key” for a “wx:for” to improve performance. 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。

推荐array 的 每一个item都添加一个唯一识别的property来管理,这样就可以去掉warning,如果使用保留关键字,好像会出现显示的item都是最后一个的

<block wx:for-items=”{{userInfoList}}” wx:key=”userInfoListId”>

SHOPNC注册国语频繁,会提示“操作频繁,禁止注册”

mikel阅读(1146)

SHOPNC注册国语频繁,会提示“操作频繁,禁止注册”

修改:

路经:

\core\framework\libraries\process.php

看着文字进行自己修改

const MAX_LOGIN = 6;        //密码连续输入多少次被暂时锁定
const MAX_COMMIT = 3;        //连续评论多少次被暂时锁定
const MAX_REG = 3;                //连续注册多少个账号被暂时锁定
const MAX_FORGET = 6;        //找回密码输入多少次被暂时锁定
const MAX_ADMIN = 8;        //后台管理员输入多少次被暂时锁定

PHP中Date获取时间不正确怎么办

mikel阅读(911)

今天用echo $showtime=date(“Y-m-d H:i:s”)获取系统时间时,发现获取的时间与系统的时间不符。

研究了一番发现,PHP默认设置的时间是以格林威治时区为标准的,所以我们必须把PHP的时区设定改为北京时间。

操作方法:

打开php.ini文件,一般在PHP的安装根目录下
找到其中的;date.timezone
删掉date.timezone前面的分号,并改成date.timezone = PRC
存盘,并重新启动Apahce服务(有时用Apache的restart功能会有问题,建议先stop然后再start)
让我们重新检验一下echo $showtime=date(“Y-m-d H:i:s”)。

是不是时间恢复正常了?

PHP写入txt文件换行 - chennan0769的专栏 - 博客频道 - CSDN.NET

mikel阅读(969)

来源: PHP写入txt文件换行 – chennan0769的专栏 – 博客频道 – CSDN.NET

今天遇到了一个问题就是用fwrite写入txt文件的时候用 \r\n不能换行

试了很久都没找到办法!

突然之间想到一个东东以前看书见过后来还是用这个东东给解决了!

现在写出来预防将来忘记也希望能帮到需要帮助的朋友!

直接看代码:

<?PHP
$stream = fopen(“robots.txt”, “w+”);
fwrite($stream, “你换行了吗?\r\n我已经换行了!”);
?>

注意:代码里面不要用单引号,我就是错在这步上如果用单引号输出的将是User-agent: *\r\nDisallow: / 因为PHP里面的单引号是不对内容里面的东西进行替换的所以用双引号,因为双引号PHP是检查里面的东西的!

本人表达能力不好! 没办法凑合着看吧!

完!

上述转载文章

一下是自己的代码

$host = getenv(“HTTP_HOST”);
$agent = getenv( “HTTP_USER_AGENT” );
date_default_timezone_set(‘Asia/Tokyo’); //
$current_date = date(‘d/m/Y == H:i:s’);

if (isset($data) && isset($result)) {
$path = $this->code->getBackupDir();
$file = $this->code->getBackupDir() . ‘entry_’ . date(“YmdHis”) . ‘_’ . $data[‘kessai_no’] . ‘_’ . $result.”.txt”;
foreach ($data as $data1){
$detailLog.= $data1;
}
if(!file_exists($file)){
$handle=fopen($file,”w+”);
fwrite($handle,”———————————————————————————\r\n”);
fwrite($handle,”▼LOG内容\r\n”);
fwrite($handle,”———————————————————————————\r\n”);
fwrite($handle,”———————————————————————————\r\n”);
fwrite($handle,”番号 = “.$data[‘kessai_no’].”\r\n”);
fwrite($handle,”———————————————————————————\r\n”);
fwrite($handle,”———————————————————————————\r\n”);
fwrite($handle,”———————————————————————————\r\n”);
fwrite($handle,”送信日時 : “.$current_date.”\r\n”);
fwrite($handle,”ブラウザ : “.$agent.”\r\n”);
fwrite($handle,”ホスト名 : “.$host.”\r\n”);
fwrite($handle,”———————————————————————————\r\n”);
fclose($handle);

}
}

PHP连接MySQL查询结果中文显示乱码解决方法

mikel阅读(961)

PHP连接MySQL查询结果中文显示乱码解决方法

修改方法:

1.最直接的还是在PHP文件的定不增加

header("Content-type: text/html; charset:utf-8");

如果提示:
Warning: Cannot modify header information – headers already sent by (output started at D:\52xinju\php\register_login.php:88) in D:\52xinju\php\register_login.php on line 90

则直接修改:php.ini中的output_buffering =On;

然后重启apache或者iis就行了