立即免费下载 Discuz!6.1.0正式版
Discuz! 6.1.0 使用说明
Discuz!NT升级至v2.1
开放源码下载
UCenter Home 1.2 正式版发布
官方站 | 帮助文档
基于ECShop的免费网店托管-卖否
PHP实战精英班培训 | LAMP培训大连
Discuz!收费服务内容及价格
论坛免费升级 手握手
Discuz!/ECShop 专用官方虚拟主机
注册付费广告征集
Comsenz 招聘信息
网店系统ECShop v2.6.0正式版火热发布
基于Discuz!的免费论坛空间5D6D
第二届PHP中国开源发展及人才状况调查
 32 1234
发新话题
打印

插件安全如何保证(FOR 插件作者版)

插件安全如何保证(FOR 插件作者版)

1.非直接执行程序请加上
复制内容到剪贴板
代码:
if(!defined('IN_DISCUZ')) {
        exit('Access Denied');
}
2.记得过滤
比如说uid等id需要intval过滤,避免溢出
文字内容需要htmlspecialchars过滤避免内容变形(DZ内为dhtmlspecialchars)

3.查询条件需要写在'和'中间.
这个是为了避免别人使用查询的条件写出溢出内容

4.所有写入mysql的变量必须addslashes(DZ内为daddslashes,如用DZ无须再次过滤,DZ已将所有$_POST和$_GET过滤),并记得在插入时前后带上'
这是为了避免破第3步将变量内带'使第3条无效
再需要选择是否插入某字段时记得不要直接使用传递来的代码而是判断是否选上什么再加上,比如
复制内容到剪贴板
代码:
if($click) {
$front = 'a, b ,c';
$back = "'$a', '$b', '$c'";
} else {
$front = $back = '';
}
然后在下面的插入内可以直接加上$front和$back
查询也类似.
必须记得如果没有将$front和$back为'',这是为了避免让别人利用了.

5.提交内容记得用submitcheck()
避免被别人利用,比如利用[img]代码

6.确保所有变量都有定义,防止被别人利用
DZ一直在改进,启用了很多新的变量也放弃了很多旧的变量,希望大家在转换过程中先了解清楚DZ是否有更改或去除以前的变量.
比如说前段时间的许愿池漏洞就是因为没有定义$discuz_root而被别人利用.

7.extract,eval等函数需要小心使用
不要被别人利用这个覆盖已有变量达到入侵目的

8.写储存文件的时候记得过滤
如果你储存文件的后缀名为PHP或其他可执行文件,记得将开头加上
复制内容到剪贴板
代码:
<?PHP
exit('Access Denied');
?>
9.可上传附件的插件记得限制类型
上传附件,为了防止他人上传可执行文件,必须检查后缀名是否含有可执行文件后缀名,最好不允许此类文件上传,如需上传请将文件名改变.
以下内容抄自DZ程序
复制内容到剪贴板
代码:
                $attach['attachment'] .= preg_replace("/(php|phtml|php3|jsp|exe|dll|asp|aspx|asa|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2",
                        substr($filename, 0, 64).'_'.random(12).'.'.$extension);
10.所有组数在运用前记得写$xxx = array();
这个的原因很简单,为了避免被利用(在地址直接加上&xxx[xxx]=abc即可被利用)
有些插件有可能因为这些原因影响插件安全

用了20分钟在这里总结些平时对安全的理解,大概不齐全,望大家补齐.
最后告诉大家一个秘诀:
检查检查再检查,发布前,请用很多时间考虑怎么样利用你写的代码入侵论坛,确保没有这种可能了再发布.

[ 本帖最后由 cnstudent 于 2006-10-20 13:46 编辑 ]
顶下!............
PHP+MySQL相关,如插件定制、数据转换等请联系QQ:282808085(请注明来意),注意:不一定收费
2#
PHP+MySQL相关,如插件定制、数据转换等请联系QQ:282808085(请注明来意),注意:不一定收费
引用:
10.所有组数在运用前记得写$xxx = array();
笔误,是数组,这个不仅仅是数组的初始化,其他变量也要初始化!
PHP+MySQL相关,如插件定制、数据转换等请联系QQ:282808085(请注明来意),注意:不一定收费
引用:
原帖由 WitQQ 于 2006-10-20 13:47 发表

笔误,是数组,这个不仅仅是数组的初始化,其他变量也要初始化!
THX.其他变量初始化在前面提到了,只是说法比较通俗.
我记得有这么一句话比较经典:任何变量都是不可信的

只要记得过滤变量,就极大程度上杜绝了跨站和SQL注入
最近会很忙,实在没空回复短信息,对不起:)大家有事情发帖子吧
安装使用区:http://www.discuz.net/forum-2-1.html  UC安装使用区:http://www.discuz.net/forum-130-1.html
严重鄙视占我楼的人.
世界多么美好,我却如此暴躁,这样不好,不好!
支持一下
。。。。
貌似DZ已经做过addslashes()转义,DZ数据表引出的变量无须再addslashes(),否则2次转义了.非涉及DZ数据表的一定需要.....
貌似DZ本身已经定义过的addslashes转义仅仅过滤单引号
 32 1234
发新话题
版块跳转