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

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[发布] [手把手教]开发dz插件——保证插件的安全

[复制链接]
绝世十二少 发表于 2011-10-14 13:45:04 | 显示全部楼层 |阅读模式
本帖最后由 绝世十二少 于 2011-10-15 11:52 编辑

想必大家都知道。一个程序的安全性是取决于它最容易被攻破的地方的。一个插件如果有安全性问题,基本上就被直接否决了,所以,对安全问题我们一定不能轻视。

对于非直接执行的程序所谓非直接运行的程序,就是你那个程序不应该直接通过地址访问的。比如,新核心开发中的页面嵌入和特殊主题的类都是如此。
对于此类程序,务必在开头加上这么一段代码:
  • if(!defined('IN_DISCUZ')) {        exit('Access Denied');}

复制代码

这一段代码是保证你的持续运行在dz中而非直接通过浏览器访问。(思考一下,为什么要这么做?)
过滤变量你没法保证递交的变量是怎样的,所以得过滤。给几个例子:
  • 1.uid:$uid=intval($uid);
  • 2.page:$page=max(1,intval($page));

复制代码

注意,使用intval后,一定要想一想,自己这个变量是不是应该非负的?如果是的话,得加个判断语句,或者用abs,max等函数处理下
对于文字内容,记得使用htmlspecialchars(dhtmlspecialchars)
写入数据库时的注意事项
要进数据库的变量一定得addslashes(DZ内为daddslashes,如用DZ无须再次过滤,DZ已将所有$_POST和$_GET过滤),当然,如果你进的是数字(比如uid,并且已经intval过),或者是其他一些肯定不会出错的,那么你可以不做这一步。
在写sql语句时,变量一定得记得用’框起来。如果变量是字符串,不这么做会出错。如果是数字不这么做不会提示出错,但是有可能有注入的危险。
数组的运用
数组在运用前记得写$xxx = array();
原因很简单,防止用户提交恶意的值。之前某个宠物系统就爆出过这个漏洞。

转自:网络(具体原文不祥)
happy7899 发表于 2011-10-14 14:05:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

a327173196 发表于 2011-10-14 14:45:52 | 显示全部楼层
哇 前排支持
回复

使用道具 举报

a23742212 发表于 2011-10-14 15:00:19 | 显示全部楼层
学习学习
回复

使用道具 举报

hzlhy 发表于 2011-10-14 15:18:10 | 显示全部楼层
前排学习.
回复

使用道具 举报

coolloyal 发表于 2011-10-14 15:31:11 | 显示全部楼层
不懂!学习下!
回复

使用道具 举报

黑白-羽翼 发表于 2011-10-14 15:38:05 | 显示全部楼层
好文章!!谢谢!
回复

使用道具 举报

zhzh8015 发表于 2011-10-14 16:54:03 | 显示全部楼层
好好看看,非常好的经验分享

www.taolebu.com
回复

使用道具 举报

aikeee 发表于 2011-10-14 23:18:05 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复

使用道具 举报

qinfangge 发表于 2012-11-11 17:52:58 | 显示全部楼层
留名支持!
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 18:59 , Processed in 0.026696 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

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