c - 确定路径是否在目录内
问题描述
在我的应用程序中,我试图检查路径是否在特定目录中。/x/y/z
例如,我希望我的应用程序的某些部分不能访问路径中的文件。我不能使用传统的文件权限,因为应用程序的其他部分应该能够访问这些文件。
一些 Internet 资源建议使用realpath
to 首先规范化路径,即解析所有符号链接和..
(例如1、2 ) 的实例。但是,似乎不可能在open
没有竞争条件 (TOCTOU) 之后执行路径解析。
char *resolved = realpath("/my/potentially/dangerous/path.txt", NULL);
// someone changes any part of the path to a symlink to something else <--- race condition
if (check_path(resolved)) {
// <--- race condition
int fd = open(resolved, O_RDONLY);
}
我是否忽略了某些东西,或者 POSIX(和 Linux)没有提供任何方法来做这样的事情而没有竞争条件?
解决方案
'openat2'(仅限 Linux)呢?
一旦你有了一个文件描述符,看看 man open
描述:
文件描述符是对打开文件描述的引用;如果随后删除或修改路径名以引用不同的文件,则此引用不受影响。
推荐阅读
- ios - 当涉及部分操作时,不调用 performBatchUpdates 完成处理程序
- python - 每当我尝试使用 pptx 库在 Python 中更新 powerpoint 图表时都会出错
- java - Slack 交互式按钮不起作用 getiing 错误:missing_subtype
- matplotlib - 多个重叠图的 Seaborn 图例修改
- python - 3D模型分类统计
- php - 如何在特价页面 opencart 1.5.6.4 上添加文字
- node.js - AWS lambda s3 节点 js
- python - 如何从循环中的嵌套列表中删除记录?
- r - 将字符串列分成多列(无标准格式)?
- r - GGPLOT:如何使用 geom_line、geom_hline、annotate 为平均值和标准偏差添加第二个 Y 轴标签