浅谈如何保证discuz插件安全
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即可被利用)
有些插件有可能因为这些原因影响插件安全
本文发于:安全大可文章转载请注明出处:http://im404.cnblogs.com
相关事宜请联系:im404@qq.com
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix