加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

如何在bash脚本中验证文件名?

发布时间:2020-12-16 01:47:29 所属栏目:安全 来源:网络整理
导读:关于我的应用程序: 我正在用bash脚本编写一个小应用程序.应用程序必须将个人设置存储到主目录. 我的设置采用键/值对的形式,将存储为文件名/内容: for example:~/my-github-app ├── github-account ├── github-token 我目前添加键/值的解决方案: rea
关于我的应用程序:

我正在用bash脚本编写一个小应用程序.应用程序必须将个人设置存储到主目录.

我的设置采用键/值对的形式,将存储为文件名/内容:

for example:
~/my-github-app
    ├── github-account
    ├── github-token

我目前添加键/值的解决方案:

read KEY
read VALUE
# FIXME! should check for for valid filename.
#        user can do injection hack by KEY="../../path/to/yourfile"
echo $VALUE > ~/my-github-app/$KEY

验证$KEY最简单,最安全的方法是什么?

>内置功能?
>正则表达式?

我真的需要一个可重用的解决方案,而不仅仅是这个应用程序.

编辑:

“validate filename”表示检查字符串的正确文件名格式,由OS接受.

>“bob”:良好的文件名格式
>“”:坏因为文件名不能为空
>“*”:?
>“/”:?
>“骗局”:?
….

解决方法

确保安全的唯一方法是使用白名单.这意味着不是将不良角色列入黑名单,而是允许使用好的角色.黑名单总是会失败的原因是你不能将所有奇怪的人列入黑名单,你总会忘记一些事情.特别是如果你正在使用unicode字符串.

文件名可以包含任何内容.根据维基百科:

Ext4 Allowed characters in filenames: All bytes except NUL (‘’) and ‘/’

这意味着整个bash脚本可能是有效的文件名.
所以,如果我是你,我只允许a-zA-Z作为有效字符.问题解决了.

你就是这样做的:

# if [[ $key =~ [^a-zA-Z] ]]; then # or this. Whatever makes more sense to you
if ! [[ $key =~ ^[a-zA-Z]+$]]; then
    echo 'Wrong key. Only a-zA-Z characters are allowed' >&2 # write to stderr
    exit 1
fi

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读