当前位置:首页 > ZBLOG > 正文

zblog怎么防注入的简单介绍

本篇文章给大家谈谈zblog怎么防注入,以及对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

zblog被挂马,怎么解决?过一段时间就被自动挂上黑链!

zblog已经很完善了,应该是您的服务器的安全方面不到位,另外先清理掉被挂的马和黑链然后把zblog升级下版本。看一下服务器日志。

Z-Blog博客系统 怎么用 详细

Z-Blog 1.7 使用手册

系统配置:

服务器:Windows 2000及IIS5.0以上,需要ADO数据库、FSO、XMLDOM等系统组件支持和空间的读写权限,具体请查询网络服务商或查看本机配置。

客户端:支持Mozilla FireFox 1.0、IE6.0、Opear 8.0及更高版本的浏览器。客户端浏览器需要启用JavaScript脚本支持。

安装说明:

如果用的是手动安装包,上传所有文件后,在浏览器中打开博客地址将自动转到初次安装的向导页.

如果用的是自动安装包,上传仅有的两个文件后,在浏览器中打开 ,其中指的是你的博客地址,像这样: ,程序会引导你完成几个简单的安装步骤.

进入向导页也仅需完成4项内容:

1.BLOG的网络地址(自动读取)

2.数据库的名称和地址(系统自动随机生成)

3.博客管理员账号(用户名与密码)

4.BLOG唯一标识符(系统自动随机生成)

实际上,在这一步中,只要设置好你的管理员账号就行了,其它三项都由程序自动生成的.

点击提交,整个安装过程就完成了,Good Luck To You!

如果你的域名更换或想把数据库移至其它目录,请参考使用说明中的"如何手动配置BLOG程序?"条目,以更新配置.

另外,在程序后台"用户管理"中,管理员可以创建比自己权限低的账号,推荐建立一个“高级用户”供日常使用。

升级说明:

使用1.2-1.6beta版本的用户,将数据库放入1.7版程序的DATA目录中,在设置完c_custom.asp里的ZC_DATABASE_PATH参数和ZC_BLOG_HOST参数后,使用以前的账号登入后台管理界面,在[备份与更新]栏使用[数据库升级]功能,让旧版的数据库升级为最新版的数据库结构,再将需要保留的附件、样式等放入相应的目录即完成了升级。1.6 Final版本的用户不用升级数据库,只修改ZC_DATABASE_PATH参数和ZC_BLOG_HOST参数。

使用说明:

1.如何手动配置BLOG程序?

当域名变更或其它原因需要手动配置BLOG程序,参照此法:

请先将c_custom.asp文件中的 ZC_BLOG_HOST 更改为已分配的IP或域名。

格式一定要是"",前面要加 http://' ,后面要加上 '/' 。

将DATA目录下的数据库改为一个非常复杂的名称。

再更改 ZC_DATABASE_PATH 值为 "data/你的数据库名称" ,数据库升级只能放在DATA目录下(你可以在升级后更改路径)。

数据库中默认的管理员账号和密码均为zblogger。

2.在[网站设置]中更改你的BLOG名称等等,也包括更换CSS界面样式等各种配置。

在设置完成之后请点[文件重建]或[索引重建]以让更改后的配置生效。

3.首次使用,请先在[分类管理]建立一个分类,再到[文章管理]中添加新日志文章。

管理员和高级用户有分类创建或删除的权限。

4.可选用UBB编辑器或是可视编辑器新建和修改日志。

在文章提交完成之后再次编辑该文件才能向对方的BLOG发送引用。

最好请自行提取正文的文字做为摘要,系统的自动截断功能有可能会使列表页显示不正常。

5.什么时候需要点击[索引重建]?

[索引重建]让系统刷新缓存和统计数据,同时,生成该BLOG的RSS 2.0和Atom 1.0聚合的XML文件于根目录中。

每次发表文章、修改分类等操作后需要点击[索引重建]。

6.什么时候需要点击[文件重建]?

当你在[网站设置]更改了相应的设置,都需要使用“文件重建”以使每个文章页面更改生效。

“文件重建”是一个消耗资源与时间的事件,尤其是BLOG中日志数量众多时。

7.如何减轻服务器压力进行[文件重建]?

在“网站设置”中将"单次重建文件数目"设置为10-20个左右,

将"单次重建文件后的间隔秒数"设置为5-10秒左右,

再进行[文件重建],就会将一个很长的过程分解为有时间间隔的小段重建过程。

8.关于“导航栏”、“友情链接”等条目请在在后台进入[文件管理]页面直接修改源文件。

它们的格式都是:

lia href="" target="_blank"布罗格的烘培机/a/li

也可在INCLUDE目录中修改相应文件的HTML代码。

9.如何让日志显示源代码,包括HTML,ASP,PHP代码等,请用“[ CODE ] [/ CODE ]”(固定文本区域)

或“[CODE_LITE] [/CODE_LITE]”将源程序包含就行了。

UBB代码请参考这里的介绍:;extra=page%3D1

10.附件都上传在UPLOAD目录中,只能上传限定类型的文件。

请用IE或FireFox上传全ASCII字符名称的文件。

在[网站设置]中可以设置上传文件的种类和大小限制。

11.如何在日志中引用附件呢?

编辑状态下上传附件将自动插入相应代码。以下格式,系统会自动将相对路径替代成绝对路径。

a href="upload/abc.zip" alt="xxx" title="xxx"xxx/a

img src="upload/abc.jpg" alt="xx" title="xxx" width="xx" height="xx" /

[ URL=]abc.jpg[/URL] 或 [URL=upload/abc.jpg]abc.jpg[/URL]

12.如何在一个站点(域名)内使用两个及以上的Z-Blog程序?

进入后台[网站设置]页,将ZC_BLOG_CLSID设置为不同的值即可。

由于程序自身的限制,Z-Blog不支持多域名共同指向同一个BLOG。

13.Z-Blog的XML-RPC功能如何使用?

Z-Blog的XML-RPC接口采用MetaWeblog的API,可以在相应软件和网站调用该接口。

相应的XMP-RPC接口URL为: ,在你的博客后台首页可以看到该地址.

14.如何应对SPAM的侵扰?

每隔一段时间(几个月或更长)在后台设置中更改一次ZC_BLOG_CLSID的值,然后进行[文件重建]。在网站设置里还可以关闭评论和引用。或是采用第三方的插件以达到此目的。

15.请保管好你的管理员账号与密码。

Z-Blog提供对管理员账号开放权限的服务器文件修改功能,这个功能非常强大但也异常危险,所以请你务必小心保管你的管理员的账号,防止他人对你网站的全面侵入。

如何在PHP中阻止SQL注入?

【一、在服务器端配置】

安全,PHP代码编写是一方面,PHP的配置更是非常关键。

我们php手手工安装的,php的默认配置文件在 /usr/local/apache2/conf/php.ini,我们最主要就是要配置php.ini中的内容,让我们执行 php能够更安全。整个PHP中的安全设置主要是为了防止phpshell和SQL Injection的攻击,一下我们慢慢探讨。我们先使用任何编辑工具打开 /etc/local/apache2/conf/php.ini,如果你是采用其他方式安装,配置文件可能不在该目录。

(1) 打开php的安全模式

php的安全模式是个非常重要的内嵌的安全机制,能够控制一些php中的函数,比如system(),

同时把很多文件操作函数进行了权限控制,也不允许对某些关键文件的文件,比如/etc/passwd,

但是默认的php.ini是没有打开安全模式的,我们把它打开:

safe_mode = on

(2) 用户组安全

当safe_mode打开时,safe_mode_gid被关闭,那么php脚本能够对文件进行访问,而且相同

组的用户也能够对文件进行访问。

建议设置为:

safe_mode_gid = off

如果不进行设置,可能我们无法对我们服务器网站目录下的文件进行操作了,比如我们需要

对文件进行操作的时候。

(3) 安全模式下执行程序主目录

如果安全模式打开了,但是却是要执行某些程序的时候,可以指定要执行程序的主目录:

safe_mode_exec_dir = D:/usr/bin

一般情况下是不需要执行什么程序的,所以推荐不要执行系统程序目录,可以指向一个目录,

然后把需要执行的程序拷贝过去,比如:

safe_mode_exec_dir = D:/tmp/cmd

但是,我更推荐不要执行任何程序,那么就可以指向我们网页目录:

safe_mode_exec_dir = D:/usr/www

(4) 安全模式下包含文件

如果要在安全模式下包含某些公共文件,那么就修改一下选项:

safe_mode_include_dir = D:/usr/www/include/

其实一般php脚本中包含文件都是在程序自己已经写好了,这个可以根据具体需要设置。

(5) 控制php脚本能访问的目录

使用open_basedir选项能够控制PHP脚本只能访问指定的目录,这样能够避免PHP脚本访问

不应该访问的文件,一定程度上限制了phpshell的危害,我们一般可以设置为只能访问网站目录:

open_basedir = D:/usr/www

(6) 关闭危险函数

如果打开了安全模式,那么函数禁止是可以不需要的,但是我们为了安全还是考虑进去。比如,

我们觉得不希望执行包括system()等在那的能够执行命令的php函数,或者能够查看php信息的

phpinfo()等函数,那么我们就可以禁止它们:

disable_functions = system,passthru,exec,shell_exec,popen,phpinfo

如果你要禁止任何文件和目录的操作,那么可以关闭很多文件操作

disable_functions = chdir,chroot,dir,getcwd,opendir,readdir,scandir,fopen,unlink,delete,copy,mkdir, rmdir,rename,file,file_get_contents,fputs,fwrite,chgrp,chmod,chown

以上只是列了部分不叫常用的文件处理函数,你也可以把上面执行命令函数和这个函数结合,

就能够抵制大部分的phpshell了。

(7) 关闭PHP版本信息在http头中的泄漏

我们为了防止黑客获取服务器中php版本的信息,可以关闭该信息斜路在http头中:

expose_php = Off

比如黑客在 telnet 80 的时候,那么将无法看到PHP的信息。

(8) 关闭注册全局变量

在PHP中提交的变量,包括使用POST或者GET提交的变量,都将自动注册为全局变量,能够直接访问,

这是对服务器非常不安全的,所以我们不能让它注册为全局变量,就把注册全局变量选项关闭:

register_globals = Off

当然,如果这样设置了,那么获取对应变量的时候就要采用合理方式,比如获取GET提交的变量var,

那么就要用$_GET['var']来进行获取,这个php程序员要注意。

(9) 打开magic_quotes_gpc来防止SQL注入

SQL注入是非常危险的问题,小则网站后台被入侵,重则整个服务器沦陷,

所以一定要小心。php.ini中有一个设置:

magic_quotes_gpc = Off

这个默认是关闭的,如果它打开后将自动把用户提交对sql的查询进行转换,

比如把 ' 转为 \'等,这对防止sql注射有重大作用。所以我们推荐设置为:

magic_quotes_gpc = On

(10) 错误信息控制

一般php在没有连接到数据库或者其他情况下会有提示错误,一般错误信息中会包含php脚本当

前的路径信息或者查询的SQL语句等信息,这类信息提供给黑客后,是不安全的,所以一般服务器建议禁止错误提示:

display_errors = Off

如果你却是是要显示错误信息,一定要设置显示错误的级别,比如只显示警告以上的信息:

error_reporting = E_WARNING E_ERROR

当然,我还是建议关闭错误提示。

(11) 错误日志

建议在关闭display_errors后能够把错误信息记录下来,便于查找服务器运行的原因:

log_errors = On

同时也要设置错误日志存放的目录,建议根apache的日志存在一起:

error_log = D:/usr/local/apache2/logs/php_error.log

注意:给文件必须允许apache用户的和组具有写的权限。

MYSQL的降权运行

新建立一个用户比如mysqlstart

net user mysqlstart fuckmicrosoft /add

net localgroup users mysqlstart /del

不属于任何组

如果MYSQL装在d:\mysql ,那么,给 mysqlstart 完全控制 的权限

然后在系统服务中设置,MYSQL的服务属性,在登录属性当中,选择此用户 mysqlstart 然后输入密码,确定。

重新启动 MYSQL服务,然后MYSQL就运行在低权限下了。

如果是在windos平台下搭建的apache我们还需要注意一点,apache默认运行是system权限,

这很恐怖,这让人感觉很不爽.那我们就给apache降降权限吧。

net user apache fuckmicrosoft /add

net localgroup users apache /del

ok.我们建立了一个不属于任何组的用户apche。

我们打开计算机管理器,选服务,点apache服务的属性,我们选择log on,选择this account,我们填入上面所建立的账户和密码,

重启apache服务,ok,apache运行在低权限下了。

实际上我们还可以通过设置各个文件夹的权限,来让apache用户只能执行我们想让它能干的事情,给每一个目录建立一个单独能读写的用户。

这也是当前很多虚拟主机提供商的流行配置方法哦,不过这种方法用于防止这里就显的有点大材小用了。

【二、在PHP代码编写】

虽然国内很多PHP程序员仍在依靠addslashes防止SQL注入,还是建议大家加强中文防止SQL注入的检查。addslashes的问题在于黑客可以用0xbf27来代替单引号,而addslashes只是将0xbf27修改为0xbf5c27,成为一个有效的多字节字符,其中的0xbf5c仍会被看作是单引号,所以addslashes无法成功拦截。

当然addslashes也不是毫无用处,它是用于单字节字符串的处理,多字节字符还是用mysql_real_escape_string吧。

另外对于php手册中get_magic_quotes_gpc的举例:

if (!get_magic_quotes_gpc()) {

$lastname = addslashes($_POST[‘lastname’]);

} else {

$lastname = $_POST[‘lastname’];

}

最好对magic_quotes_gpc已经开放的情况下,还是对$_POST[’lastname’]进行检查一下。

再说下mysql_real_escape_string和mysql_escape_string这2个函数的区别:

mysql_real_escape_string 必须在(PHP 4 = 4.3.0, PHP 5)的情况下才能使用。否则只能用 mysql_escape_string ,两者的区别是:mysql_real_escape_string 考虑到连接的

当前字符集,而mysql_escape_string 不考虑。

总结一下:

* addslashes() 是强行加\;

* mysql_real_escape_string() 会判断字符集,但是对PHP版本有要求;

* mysql_escape_string不考虑连接的当前字符集。

-------------------------------------------------------------------------------------------------

在PHP编码的时候,如果考虑到一些比较基本的安全问题,首先一点:

1. 初始化你的变量

为什么这么说呢?我们看下面的代码:

PHP代码

?php

if ($admin)

{

echo '登陆成功!';

include('admin.php');

}

else

{

echo '你不是管理员,无法进行管理!';

}

?

好,我们看上面的代码好像是能正常运行,没有问题,那么加入我提交一个非法的参数过去呢,那么效果会如何呢?比如我们的这个页是,那么我们提交:,呵呵,你想一些,我们是不是直接就是管理员了,直接进行管理。

当然,可能我们不会犯这么简单错的错误,那么一些很隐秘的错误也可能导致这个问题,比如phpwind论坛有个漏洞,导致能够直接拿到管理员权限,就是因为有个$skin变量没有初始化,导致了后面一系列问题。那么我们如何避免上面的问题呢?首先,从php.ini入手,把php.ini里面的register_global =off,就是不是所有的注册变量为全局,那么就能避免了。但是,我们不是服务器管理员,只能从代码上改进了,那么我们如何改进上面的代码呢?我们改写如下:

PHP代码

?php

$admin = 0; // 初始化变量

if ($_POST['admin_user'] $_POST['admin_pass'])

{

// 判断提交的管理员用户名和密码是不是对的相应的处理代码

// ...

$admin = 1;

}

else

{

$admin = 0;

}

if ($admin)

{

echo '登陆成功!';

include('admin.php');

}

else

{

echo '你不是管理员,无法进行管理!';

}

?

那么这时候你再提交就不好使了,因为我们在一开始就把变量初始化为 $admin = 0 了,那么你就无法通过这个漏洞获取管理员权限。

2. 防止SQL Injection (sql注射)

SQL 注射应该是目前程序危害最大的了,包括最早从asp到php,基本上都是国内这两年流行的技术,基本原理就是通过对提交变量的不过滤形成注入点然后使恶意用户能够提交一些sql查询语句,导致重要数据被窃取、数据丢失或者损坏,或者被入侵到后台管理。

那么我们既然了解了基本的注射入侵的方式,那么我们如何去防范呢?这个就应该我们从代码去入手了。

我们知道Web上提交数据有两种方式,一种是get、一种是post,那么很多常见的sql注射就是从get方式入手的,而且注射的语句里面一定是包含一些sql语句的,因为没有sql语句,那么如何进行,sql语句有四大句:select 、update、delete、insert,那么我们如果在我们提交的数据中进行过滤是不是能够避免这些问题呢?

于是我们使用正则就构建如下函数:

PHP代码

?php

function inject_check($sql_str)

{

return eregi('select|insert|update|delete|'|

function verify_id($id=null)

{

if (!$id) { exit('没有提交参数!'); } // 是否为空判断

elseif (inject_check($id)) { exit('提交的参数非法!'); } // 注射判断

elseif (!is_numeric($id)) { exit('提交的参数非法!'); } // 数字判断

$id = intval($id); // 整型化

return $id;

}

?

呵呵,那么我们就能够进行校验了,于是我们上面的程序代码就变成了下面的:

PHP代码

?php

if (inject_check($_GET['id']))

{

exit('你提交的数据非法,请检查后重新提交!');

}

else

{

$id = verify_id($_GET['id']); // 这里引用了我们的过滤函数,对$id进行过滤

echo '提交的数据合法,请继续!';

}

?

好,问题到这里似乎都解决了,但是我们有没有考虑过post提交的数据,大批量的数据呢?

比如一些字符可能会对数据库造成危害,比如 ' _ ', ' %',这些字符都有特殊意义,那么我们如果进行控制呢?还有一点,就是当我们的php.ini里面的magic_quotes_gpc = off的时候,那么提交的不符合数据库规则的数据都是不会自动在前面加' '的,那么我们要控制这些问题,于是构建如下函数:

PHP代码

?php

function str_check( $str )

{

if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否打开

{

$str = addslashes($str); // 进行过滤

}

$str = str_replace("_", "\_", $str); // 把 '_'过滤掉

$str = str_replace("%", "\%", $str); // 把' % '过滤掉

return $str;

}

?

我们又一次的避免了服务器被沦陷的危险。

最后,再考虑提交一些大批量数据的情况,比如发贴,或者写文章、新闻,我们需要一些函数来帮我们过滤和进行转换,再上面函数的基础上,我们构建如下函数:

PHP代码

?php

function post_check($post)

{

if (!get_magic_quotes_gpc()) // 判断magic_quotes_gpc是否为打开

{

$post = addslashes($post); // 进行magic_quotes_gpc没有打开的情况对提交数据的过滤

}

$post = str_replace("_", "\_", $post); // 把 '_'过滤掉

$post = str_replace("%", "\%", $post); // 把' % '过滤掉

$post = nl2br($post); // 回车转换

$post= htmlspecialchars($post); // html标记转换

return $post;

}

?

呵呵,基本到这里,我们把一些情况都说了一遍,其实我觉得自己讲的东西还很少,至少我才只讲了两方面,再整个安全中是很少的内容了,考虑下一次讲更多,包括php安全配置,apache安全等等,让我们的安全正的是一个整体,作到最安全。

最后在告诉你上面表达的:1. 初始化你的变量 2. 一定记得要过滤你的变量

zblog怎么防注入的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于、zblog怎么防注入的信息别忘了在本站进行查找喔。

取消
扫码支持 支付码