中易网

创建文件路径时如何避免攻击者攻击路径参数

答案:2  悬赏:0  
解决时间 2021-01-30 06:57
创建文件路径时如何避免攻击者攻击路径参数
最佳答案
避免出现delete this操作
说明:对象指针应避免使用delete this语句硬删除,除非能保证this指针删除后不再被引用,并且保证对象是通过new操作符在堆上创建的。
原因有两个:
(1)类的对象既可能是栈对象,也可能是堆对象。如果对栈对象的指针进行delete,即删除非动态分配的内存,会导致未定义行为;
(2)二是delete this容易产生悬挂指针(dangling pointer),悬挂指针是个严重的安全漏洞,可以被攻击者利用执行任意代码。
错误示例:错误的删除this指针
class SomeClass
{
public:
SomeClass();
~SomeClass();
void doSomething();
void destroy();
// ...
};
void SomeClass::destroy()
{

delete this; //【错误】删除this指针会导致出现悬挂指针
}
void main()
{

SomeClass sc; // 声明栈对象

sc.destroy(); // 释放非动态分配的内存。
}
推荐做法1:不delete this,让栈对象离开作用域后自动析构。
class SomeClass
{
public:
SomeClass();
~SomeClass();
void doSomething();
void destroy();
// ...
};
void SomeClass::destroy()
{

// delete this; // Dangerous!!
}
// ...
void main()
{
SomeClass sc; // 声明栈对象

} // 离开作用域,自动调用sc.~SomeClass()
如果不得不使用delete this,保证类对象是堆对象,且this指针delete后置NULL,可参考如下示例代码:
class SomeClass
{
public:
SomeClass();
void doSomething();
void destroy();
// ...
protected:
~SomeClass();
};
void SomeClass::destroy()
{

delete this;
}
// ...
{
SomeClass* sc = new SomeClass();

sc->destroy();
sc = NULL;
}
这个示例代码中,将析构函数声明为protected,可以保证类SomeClass的对象不会在栈上生成。同时,在显示调用destory()来delete this指针后,再将指针置NULL,防止指针解引用。
延伸阅读材料:Dangling Pointer, Jonathan Afek, 2/8/07, BlackHat USA
规则9.4:禁止在类的公共接口中返回类的私有数据地址
说明:如果一个类私有成员数据的引用或者其指针,被类的公有函数作为返回值return,则此私有数据可能会遭受到非可信代码的修改,导致引入不安全因素。
全部回答
你说呢...
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
1980年阴历3月初4
华源综合商店地址在哪,我要去那里办事
烂木头里的虫子可以吃的吗
根号8+根号18等于多少
傻子是什么意思
联想Y400玩英雄联盟游戏加载的很慢,总是最后
手机上什么应用可以把两个视频合成一个
标志的设计应具有什么特点?
unicode 控制字符 小键盘上的0 是什么啊?
木醋和电气石放一起会怎样
乡人大任期几年
女生说和你不熟是什么意思(女士请)
用人单位可以和个人签劳务协议吗
真丝可不可以用活性染料染 ?
北京信息科技大学研究生报名资格,毕业资格
推荐资讯
有什么办法可以打到广东省教育考试院的电话
雌性动物的牝门也是大补么
我老师让我抄中学生行为准则12条100遍,算体
丹田到底是在脐下还是脐内啊?为什么意守没感
dnf 绝刀 残杀 斩重下三件 满属性各是多少
1000元以下的滑盖手机有哪些
拜求好看的经典的bl古风文啊~~~文荒啊文荒
航海英语常用口语
父亲的双臂作文350字
英雄联盟怎样查看敌方所拿大龙小龙数
我的车灯不怎么亮,除了改装疝气灯,还有没有
从南焦出发做几路公交车到石家庄花都艺术学校
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?