gpt4 book ai didi

c++ - 从用户提供的路径中删除前导 "../"

转载 作者:行者123 更新时间:2023-11-30 04:17:50 25 4
gpt4 key购买 nike

我有一个简单的 C++ 应用程序,用于以另一个用户身份在特定目录中执行 perl 脚本。

wrapper my-perl-script.pl

我想确保用户不会试图通过前缀“../”来欺骗 C++ 应用程序在特定目录之外执行脚本。最好/最简单的方法是什么?

这是我的包装器源代码的精简版。

int  main (int argc, char *argv[])
{

/* set user here */

stringstream userCmd;

userCmd << "/path/to/scripts/";

for ( int i = 1; i < argc; i++ ) {

if ( i == 1) {
// remove instances of ../ from the first argument

userCmd << argv[i]
}
else {
// add user supplied arguments for perl script to command
userCmd << " " << argv[i];
}

}

/* use system to execute the user command */


return 0;
}

最佳答案

我更喜欢使用字符串而不是原始指针/数组:

 int (int argc, char *argv[]) {

std::string path (argv[1]);

if (path.find("..") == std::string::npos)
{
//everything's fine
}
else
std::cout << "No execution in parent directories allowed.";
}

您不删除“..”的原因是如果用户输入类似“../bad/evenworse/script.sh”的路径将不再正确

关于c++ - 从用户提供的路径中删除前导 "../",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16820283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com