Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

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

[复制链接]
cnstudent 发表于 2006-10-20 13:39:47 | 显示全部楼层 |阅读模式
1.非直接执行程序请加上
  1. if(!defined('IN_DISCUZ')) {
  2.         exit('Access Denied');
  3. }
复制代码


2.记得过滤
比如说uid等id需要intval过滤,避免溢出
文字内容需要htmlspecialchars过滤避免内容变形(DZ内为dhtmlspecialchars)

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

4.所有写入mysql的变量必须addslashes(DZ内为daddslashes,如用DZ无须再次过滤,DZ已将所有$_POST和$_GET过滤),并记得在插入时前后带上'
这是为了避免破第3步将变量内带'使第3条无效
再需要选择是否插入某字段时记得不要直接使用传递来的代码而是判断是否选上什么再加上,比如

  1. if($click) {
  2. $front = 'a, b ,c';
  3. $back = "'$a', '$b', '$c'";
  4. } else {
  5. $front = $back = '';
  6. }
复制代码

然后在下面的插入内可以直接加上$front和$back
查询也类似.
必须记得如果没有将$front和$back为'',这是为了避免让别人利用了.

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

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

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

8.写储存文件的时候记得过滤
如果你储存文件的后缀名为PHP或其他可执行文件,记得将开头加上
  1. <?PHP
  2. exit('Access Denied');
  3. ?>
复制代码


9.可上传附件的插件记得限制类型
上传附件,为了防止他人上传可执行文件,必须检查后缀名是否含有可执行文件后缀名,最好不允许此类文件上传,如需上传请将文件名改变.
以下内容抄自DZ程序
  1.                 $attach['attachment'] .= preg_replace("/(php|phtml|php3|jsp|exe|dll|asp|aspx|asa|cgi|fcgi|pl)(\.|$)/i", "_\\1\\2",
  2.                         substr($filename, 0, 64).'_'.random(12).'.'.$extension);
复制代码


10.所有组数在运用前记得写$xxx = array();
这个的原因很简单,为了避免被利用(在地址直接加上&xxx[xxx]=abc即可被利用)
有些插件有可能因为这些原因影响插件安全

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

[ 本帖最后由 cnstudent 于 2006-10-20 13:46 编辑 ]
WitQQ 发表于 2006-10-20 13:40:42 | 显示全部楼层
顶下!............
回复

使用道具 举报

WitQQ 发表于 2006-10-20 13:41:02 | 显示全部楼层
2#
回复

使用道具 举报

WitQQ 发表于 2006-10-20 13:47:02 | 显示全部楼层
10.所有组数在运用前记得写$xxx = array();

笔误,是数组,这个不仅仅是数组的初始化,其他变量也要初始化!
回复

使用道具 举报

 楼主| cnstudent 发表于 2006-10-20 13:48:58 | 显示全部楼层
原帖由 WitQQ 于 2006-10-20 13:47 发表

笔误,是数组,这个不仅仅是数组的初始化,其他变量也要初始化!

THX.其他变量初始化在前面提到了,只是说法比较通俗.:)
回复

使用道具 举报

童虎 发表于 2006-10-20 13:52:22 | 显示全部楼层
我记得有这么一句话比较经典:任何变量都是不可信的

只要记得过滤变量,就极大程度上杜绝了跨站和SQL注入
回复

使用道具 举报

freddy 发表于 2006-10-20 14:27:05 | 显示全部楼层
严重鄙视占我楼的人.
回复

使用道具 举报

zjh 发表于 2006-10-20 14:31:15 | 显示全部楼层
支持一下
。。。。
回复

使用道具 举报

topbad 发表于 2006-10-20 14:38:11 | 显示全部楼层
貌似DZ已经做过addslashes()转义,DZ数据表引出的变量无须再addslashes(),否则2次转义了.非涉及DZ数据表的一定需要.....
回复

使用道具 举报

topbad 发表于 2006-10-20 14:42:04 | 显示全部楼层
貌似DZ本身已经定义过的addslashes转义仅仅过滤单引号
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-12-23 04:14 , Processed in 0.038307 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表