无法通过搜索(可能是错误的关键字)找到答案,所以我正在创建一个新问题.
如何使用字符串参数处理dllexported方法的参数检查.一般规则永远不会信任用户,但实际上呢?例如:
int foo(const char *bar)
{
if(!bar)
return FAIL;
???
}
Run Code Online (Sandbox Code Playgroud)
假设库的用户调用我们的函数,如:
foo(reinterpret_cast<char*>(0x00000008));
Run Code Online (Sandbox Code Playgroud)
这应该首先导致AV:
strlen(bar);
Run Code Online (Sandbox Code Playgroud)
有办法防范这个吗?正确处理错误的方法?
我知道IsBadReadPtr是不可能的,因为这个函数是一类危险的,永远不会被使用.但是,我有什么方法可以处理这个问题吗?我不能__declpec(dllexport)std :: string,可以吗?此外,即使我愿意,std :: string也有某种线程本地存储或静态,当我从不同的模块使用时会导致访问冲突(据我所知(由静态或不同的堆引起?).
使用这些功能存在安全风险,堆栈溢出(R/E)IP覆盖,还是只会导致安全的AV?
"永远不要相信用户"是一种适用于不同环境的说法 - 当"用户"是运行客户端程序并将数据发送到您正在编写的服务器程序的人时.
当"用户"是使用您的代码作为库的人时,它应该更接近:"总是编写代码,以便任何出错的东西真的是用户的错;然后在出现问题时责怪用户".:)