站长百科 | 数字化技能提升教程 数字化时代生存宝典
首页
数字化百科
电子书
建站程序
开发
服务器
办公软件
开发教程
服务器教程
软件使用教程
运营教程
热门电子书
WordPress教程
宝塔面板教程
CSS教程
Shopify教程
导航
程序频道
推广频道
网赚频道
人物频道
网站程序
网页制作
云计算
服务器
CMS
论坛
网店
虚拟主机
cPanel
网址导航
WIKI使用导航
WIKI首页
最新资讯
网站程序
站长人物
页面分类
使用帮助
编辑测试
创建条目
网站地图
站长百科导航
站长百科
主机侦探
IDCtalk云说
跨境电商导航
WordPress啦
站长专题
网站推广
网站程序
网站赚钱
虚拟主机
cPanel
网址导航专题
云计算
微博营销
虚拟主机管理系统
开放平台
WIKI程序与应用
美国十大主机
编辑“
Discuz:插件代码的安全规范
”
人物百科
|
营销百科
|
网赚百科
|
站长工具
|
网站程序
|
域名主机
|
互联网公司
|
分类索引
跳转至:
导航
、
搜索
警告:
您没有登录。如果您做出任意编辑,您的IP地址将会公开可见。如果您
登录
或
创建
一个账户,您的编辑将归属于您的用户名,且将享受其他好处。
反垃圾检查。
不要
加入这个!
__NOTOC__ {{Discuz! 6.0 top}} <div style="clear:both;"></div> <p style="text-indent:2em;">[[Discuz]]插件代码的安全规范,总的来说 [[PHP]] 还是相对安全的 [[Web]] 程序,但是由于一些代码在处理方式上的不成熟导致了安全隐患.由于这个议题范围太广,所以推荐 PHPCHINA 的[http://down.zzbaike.com/download/phpsecurity-1218.html Essential PHP Security -PHP安全基础] 一书给大家,希望对大家有帮助。更详细的 PHP 安全信息可以登录 php.net 查找。</p> <p style="text-indent:2em;">那么,对于[[插件]]安全究竟我们要做些什么怎么做?</p> <h5>1、变量的初始化</h5> <p style="text-indent:2em;">这里不讨论 magic_quotes_gpc 和 register_globals 的设置情况,大家只要注意不要“无中生有”变量,每个变量的得到都是自己初始化过的。</p> <h5>2、逻辑关系清楚</h5> <p style="text-indent:2em;">对于逻辑的判定不是一句话能够说明白的,举个简单的例子,在判断上传文件的时候,我们判断的依据是他的后缀是否在我们允许的后缀里面,如果是允许的就执行[[上传]],反之就提示上传文件后缀不对,但是如果用户上传的文件名是 webshell.xxx.mht(允许mht 文件上传,mht 是一种[[网页]]存储格式),于是文件上传了,在 [[apache]] 系统的默认配置下,这个文件是会用 PHP 来解析的,利用这个算是 BUG 的问题吧,小版本人就曾伙同PHP安全界知名人士(帮他匿了)对我们学校的[[服务器]]完成了入侵,并最终取得了 root 权限(目前俺们学校的服务器已经修正此问题),举这个例子是为了说明程序处理的重要性,如果当时多一步判断上传的文件,也许这个安全问题就不再存在,其实这个例子来说明逻辑关系并不是很合适,但是程序处理真的是一个非常重要的部分。</p> <h5>3、' '与" "的区别运用</h5> <p style="text-indent:2em;">单引号中,任何变量($var)、特殊转义字符(如“\t \r \n”等)不会被解析,因此PHP的解析速度更快,转义字符仅仅支持“\’”和“\\”这样对单引号和反斜杠本身的转义; </p> <p style="text-indent:2em;">双引号中,变量($var)值会代入字符串中,特殊转义字符也会被解析成特定的单个字符,还有一些专门针对上述两项特性的特殊功能性转义,例如“\$”和“{$array[‘key’]}.这样虽然程序编写更加方便,但同时PHP的解析也很慢; </p> <p style="text-indent:2em;">数组中,如果下标不是整型,而是字符串类型,请务必用单引号将下标括起,正确的写法为 $array[‘key’],而不是 $array[key],因为不正确的写法会使PHP解析器认为key是一个常量,进而先判断常量是否存在,不存在时才以“key”作为下标带入表达式中,同时出发错误事件,产生一条 Notice 级错误。</p> <p style="text-indent:2em;">因此,在绝大多数可以使用单引号的场合,禁止使用双引号.依据上述分析,可以或必须使用单引号的情况包括但不限于下述:</p> <p style="text-indent:2em;">字符串为固定值,不包含“\t”等特殊转义字符;</p> <p style="text-indent:2em;">数组的固定下标,例如$array[‘key’]; </p> <p style="text-indent:2em;">表达式中不需要带入变量,例如$string = ‘test’;而非$string = “test$var”; </p> <h5>4、数据的过滤与处理</h5> <p style="text-indent:2em;">对于任何得到的数据在不能确定或者不能充分确定其来路的时候一定要进行过滤与处理,在数据进入程序运行处理阶段之前,一定要保证它的准确性和正确性。</p> <h5>5、不要相信任何数据的准确性和正确性</h5> <p style="text-indent:2em;">这条视乎是和上面一条雷同,但是即使是从[[数据库]]中查出来的数据也一样不能确定,比如生成 cache 文件,如果用户 POST 的数据错误不是我们期望的数据,而“恰巧”生成到文件中,于是一个webshell产生了,同样这个例子也不是很合适,我只是希望大家明白这么一点,如果我们没有一个很好的处理数据的方式,那么代码的安全崩溃也就指日可待。</p> <h5>6、不要妄图直接把低版本的 Discuz! 插件直接运行</h5> <p style="text-indent:2em;">由于每个大版本的升级都会带来系统构架的一些变化,可能旧版本的插件仍然可以使用,但是或许一些不可预料的问题正在隐藏中,所以建议任何低版本的 [[Discuz! 插件]]最好是经过仔细研究之后再公告说可以适用新版本 Discuz! 插件。</p> == 参考来源 == *http://faq.comsenz.com/ {{Discuz! 6.0}} [[category:Discuz插件说明]]
摘要:
请注意,您对站长百科的所有贡献都可能被其他贡献者编辑,修改或删除。如果您不希望您的文字被任意修改和再散布,请不要提交。
您同时也要向我们保证您所提交的内容是您自己所作,或得自一个不受版权保护或相似自由的来源(参阅
Wordpress-mediawiki:版权
的细节)。
未经许可,请勿提交受版权保护的作品!
取消
编辑帮助
(在新窗口中打开)
本页使用的模板:
模板:Discuz! 6.0
(
编辑
)
模板:Discuz! 6.0 top
(
编辑
)