在Nginx下安装和配置完Naxsi之后,为了能够使网站能够区分非法行为和合法行为,需要管理员将合法行为列入白名单。管理员可以通过分析nginx的错误日志手动添加白名单规则,或者通过密集的自动学习工具(nxapi或nxtool),这些工具将自动生成有关网站行为的白名单规则。本文主要介绍白名单规则以及如何通过分析nginx错误日志手动添加白名单规则。
10年的昭化网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。成都全网营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整昭化建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“昭化网站设计”,“昭化网站推广”以来,每个客户项目都认真落实执行。
naxsi核心规则文件naxsi_core.rules需要在nginx配置文件nginx.conf下的http部分导入,而naxsi白名单规则文件naxsi_whitelists.rules一般在nginx配置文件nginx.conf下的location部分导入,可放置在CheckRules语句之前。
location部分对应的配置内容如下。
为了区分Naxsi和Nginx的错误日志,可以为Naxsi设置相应的错误日志目录和文件名。在本文中,Naxsi对应的错误日志为foo.log。
如果服务器安装的是Wordpress或者ruTorrent或者dokuwiki或者drupal等,可以直接在 naxsi-rules 找到Naxsi官方制作的白名单。如果都没有找到适合的白名单,就只能自己去配置白名单了。
白名单规则的语法如下所示。然后介绍语法中的重要组成部分。
这部分指的是哪些拦截规则会进入白名单。以下举例进行说明。
wl:0 : 把所有拦截规则加入白名单
wl:42 : 把ID为42的拦截规则加入白名单
wl:42,41,43 : 把ID为42, 41 和 43的拦截规则加入白名单
wl:-42 : 把所有拦截规则加入白名单,除了ID为42的拦截规则
这部分指的是本条白名单的生效区域。区域有如下组成部分。
以下对静态的白名单规则进行举例说明。
已知拦截规则1000是过滤包含select|union|update|delete|insert|table|from|ascii|hex|unhex之类SQL关键字的规则。
在本子规则中完全禁用拦截规则1000。因为没有指定区域,所以全部加入白名单。
在全部GET参数名为foo的值中禁用拦截规则1000 (即不用1000规则检查GET中参数名为foo中的值)。所以, * from a 不会被过滤。
在URL为/bar的GET请求中参数名为foo的值中禁用拦截规则1000。所以, * from a 不会被过滤。
在URL为/bar的GET请求中的参数禁用拦截规则1000。所以, * from a 不会被过滤。 也不会被过滤。
在全部GET请求中对所有参数名(只是名,不包含参数值)中禁用拦截规则1000。所以, 不会被过滤。但是, 会被过滤(因为select属于参数值,不在白名单范围内)。
在URL为/bar的全部GET请求中对所有参数名(只是名,不包含参数值)中禁用拦截规则1000。所以, 不会被过滤。但是, 会被过滤(因为select属于参数值,不在白名单范围内)。
在全部请求中对符合^/upload/(. ).(. )$正则规则的URL禁用全部拦截规则。所以, 不会被过滤 (原本会触发1000拦截规则)。
以下对含正则表达式的白名单规则进行举例说明。
在全部GET参数名含有meh的值中禁用拦截规则1000 (即不用1000规则检查GET中参数名含有meh中的值)。所以, * from a 不会被过滤。
在全部GET参数名以meh开始的值中禁用拦截规则1000 (即不用1000规则检查GET中参数名以meh开始的值)。所以, * from a 不会被过滤。
在全部GET参数名格式为“meh_数字”的值中禁用拦截规则1000 (即不用1000规则检查GET中参数名格式为“meh_数字”的值)。所以, * from a 不会被过滤。
在URL以/foo开始的GET请求中的参数禁用拦截规则1000。所以, * from a 不会被过滤。 也不会被过滤。
在URL以/foo开始的GET请求中的以数字开始命名的参数禁用拦截规则1000。所以, * from a 不会被过滤。 也不会被过滤。
以下对RAW_BODY的白名单规则进行举例说明。以RAW_BODY为目标的白名单规则的编写方式与任何其他BODY规则相同。
已知拦截规则4241是即便在学习模式下也要过滤RAW_BODT中包含字符串RANDOMTHINGS的规则。
在本子规则中,在URL为/的BODY中的内容禁用拦截规则4241,意味着该目录下的任意BODY内容都不会被过滤。
以下对FILE_EXT的白名单规则进行举例说明。
在本子规则中,在URL为/index.html的文件上传部分禁用拦截规则1337,意味着可在该目录下上传任意文件。
以下对JSON的白名单规则进行举例说明。
JSON可被当作BODY, 以变量的形式表示文本内容。在本子规则中,对POST的参数lol禁用拦截规则1302,即以下JSON内容可以被通过。
以下为访问 * from a的错误日志记录。
从zone0=ARGS可看出被过滤的区域是ARGS,从id0=1000可看出拦截规则的id是1000,从var_name0=foo可看出被过滤的变量为foo。因此可以编写如下白名单规则。
1. Naxsi Wiki
2. NGINX的WAF模块-Naxsi 配置白名单
3. whitelists-bnf
4. matchzones-bnf
5. whitelists-examples
一、关闭wordpress自带站内搜索
php+mysql已经广泛应用于各大网站,但sql注入问题是都会存在的一大事实,黑客就是利用sql注入做了许多坏事。wordpress网站使用人数也逐渐增高,在安全性上也是公认的,回过头来说站内搜索吧,别扯远了,高深的问题当下也消化不了。
一般来说sql查询越多,对网站效率越差负载也很高,为了优化wordpress怎么减少sql查询呢?因为wordpress自带的站内搜索不单每次都进行sql查询,而且查询都是不是十分准确的,所以可以换成百度或谷歌等这些开放站内搜索,来进行wordpress优化,还提高了用户体验。
但如果有访客通过"wordpress/?s=$key"这种方式,仍然可以使用wordpress自带的站内搜索,因此,下面就可以用这种方法完全关闭wordpress自带的站内搜索。方法很简单,只需在function.php中加入以下代码即可。
function fb_filter_query( $query, $error = true ) {
if ( is_search() ) {
$query-is_search = false;
$query-query_vars[s] = false;
$query-query[s] = false;
if ( $error == true )
$query-is_404 = true;
}
}
add_action( 'parse_query', 'fb_filter_query' );
add_filter( 'get_search_form', create_function( '$a', "return null;" ) );
二、关闭wordpress对外请求
相信大家都发现了,浏览器状态栏会有wordpress网站向其他网站的链接,这大大影响了wordpress站点的速度,为了优化wordpress,可以在wp-config.php中插入以下代码来屏蔽对外请求。
define('WP_HTTP_BLOCK_EXTERNAL', true);
到这里,相信大家就开始怀疑影不影响收录,其实完全可以设置wordpress对外请求白名单,将百度、google等ping地址添加上即可。代码如下(以百度为例):
define('WP_ACCESSIBLE_HOSTS', 'ping.baidu点抗 ');
转发 评论 0 浏览 5090
昵称(必填)
邮箱 (必填)
网址
解决方法如下
方法一: 将wp-includes文件夹下的kses.php中的2句话屏蔽掉即可,如
//add_action('init', 'kses_init'); //add_action('set_current_user', 'kses_init');
上面这种做法是去掉wordpress对所有标签的过滤,但将这些开放给注册用户会存在潜在的隐患,不推荐使用!
方法二: 把自己想要不被过滤的标签添加到“不过滤的白名单中”!
具体操作: 在wp-includes文件夹下的kses.php中搜索 $allowedposttags,这是个不过滤标签组成的数组,里面所列即是不过滤的标签集合,假如你发表文章时带有style、script两组标签,又不想被不过滤,可在$allowedposttags中添加下面语句:
'style' = array(), 'script' = array()
将上面两句加入 $allowedposttags的一维数组(即最外面那层array)中即可!!
添加全局变量$allowedposttags的值,添加你所需要启用的标签。这种方法将只对提交的文章启用标签。
如此修改,每次升级wp以后还需要验证代码的有效性(代码的结构有可能变化),然后需要重新修改。总得来说原则是能使用插件就尽量不修改源代码。
数据库也是影响 WordPress 运行速度重要的因素之一,频繁调用、查询数据库会拖累网站整体的加载速度。今天大挖结合自己的实践操作来
优化一些 WordPress 数据库不必要的查询次数。希望可以帮助到大家有效提升博客的速度。
先给大家分享一段可以在wordpress主题底部显示当前运行时 WordPress 数据库查询次数和内存使用情况的代码:
1
2
3
4
5
6
7
8
9
10
//显示数据库查询次数、查询时间及内存占用的代码
function performance( $visible = false ) {
$stat = sprintf( '%d 次查询 用时 %.3f 秒, 耗费了 %.2fMB 内存',
get_num_queries(),
timer_stop( 0, 3 ),
memory_get_peak_usage() / 1024 / 1024
);
echo $visible ? $stat : "" ;
}
add_action( 'wp_footer', 'performance', 20 );
上面的代码,直接放到主题function.php里即可。
优化WordPress 数据库查询:首先需要在 WordPress 的wp-config.php里进行优化操作,具体配置如下:
1
2
3
4
5
6
7
8
9
10
11
12
define('COOKIE_DOMAIN', '');
//设置地址而不是服务器检查,这将减少服务器查询
define('WP_HOME', '');
define('WP_SITEURL', '');
//优化文章修改历史:Post-Revisioning
define('AUTOSAVE_INTERVAL', 120);// 修改WordPress 编辑器自动保存时间间隔为120秒保存一次
define('WP_POST_REVISIONS', 5);//仅保留保留5个最近修改,也可以减小此数字,但不能太低了
define('EMPTY_TRASH_DAYS', 7 );//7天后自动清空回收站,这个自己根据情况设定
define( 'CORE_UPGRADE_SKIP_NEW_BUNDLED', true );//更新时跳过 wp-content 目录,增加更新效率
//通过剔除对模板路径和样式表路径的数据库查询,这样可提高站点的性能。
define('TEMPLATEPATH', '/wp-content/themes/wa');
define('STYLESHEETPATH', '/wp-content/themes/wa');
如果你没有使用缓存插件,开启WP自带的缓存(Cache)功能,并设置缓存时间,是非常必要的事情。
1
2
3
define('WP_CACHE, true); // 打开 WordPress 自带的缓存功能
define('ENABLE_CACHE', true); // 缓存开关
define('CACHE_EXPIRATION_TIME', 3600); // 缓存时间间隔
注:3.0后版本要开始缓存在/wp-includes/default-constants.php中开启,切记哦!
wordpress程序自身会经常向wordpress点抗 的服务器发送请求传送数据,我们可以通过设置wp-config.php来屏蔽此类外部请求的发送,在wp-config.php添加如下代码:
1
2
//禁止WordPress程序发出对外请求
define('WP_HTTP_BLOCK_EXTERNAL', true);
值得注意的是我们在加入以上代码后你的网站将无法对任何一个外部服务器发出请求,如果站长朋友们为了加速网站收录使用了ping功能,加上以上代码后ping功能将会失效。解决方法:我们可以设置对外请求白名单即可解决ping失效问题,代码如下:(以百度ping为例)
1
define('WP_ACCESSIBLE_HOSTS', 'ping.baidu点抗 ');//仅允许 WordPress 向ping.baidu点抗 发送请求
通过 WordPress 的wp-config.php配置完后大家 可以用本文开头分享的代码在源代码里查看和对比一下是不是数据库查询次数和内存使用量有所改善。还有就是要养成提前备份的好习惯,否则后果自负了!