我正在运行一个主要由bash脚本组成的BBS。
偶然地,我碰巧今天进入Lynx,然后按“ /”并按ENTER。当它吐出我的根目录的内容时,请想象一下我的恐惧!我一直在Windows中执行此操作(在浏览器中访问本地文件),但是我从来没有想过要在这里考虑。
具有讽刺意味的是,有一个lynx标志可以禁用 NON-localhost位置,但是我要做的是相反的方法。本地计算机上有敏感的数据库密码和其他受保护的信息。我听说通过在远程计算机(在本例中为BBS)上运行Lynx并利用此漏洞,有几台类似的计算机以这种方式被伪装。
我试图通过设置if-else语句来解决此问题。不幸的是,在URL中键入“ /”仍然有效。
read -r -p "Web Address: " url
if [ "${url:0:4}" == "http" ] || [ "${url:0:5}" == "https" ]
then
lynx $url -accept_all_cookies
else
$url="http://$url"
lynx $url -accept_all_cookies
fi
鉴于此性质,我想确保我们有防弹解决方案,因为这是生产机器。有什么方法可以100%可靠地清除用户输入内容,以防止访问本地文件?
访问localhost和127.0.0.1很好;不必要,但是要做的只是显示“ Apache成功安装”页面。
我的想法是:
这有点困难,因为输入“ /”时,Lynx似乎将其重定向到URL,发牢骚,然后将其重定向到本地URL:
Web Address: /
/home/com/file.sh: line 109: /=http:///: No such file or directory
/ directory (p1 of 2)
Current directory is /
然后继续转储我的根目录列表。
但是,我意识到这还不够。用户仍然可以在目录中键入本地文件的名称。我在调用该脚本的目录中键入了外壳脚本的名称,然后Lynx吐出了bash脚本的内容。
最重要的是,一旦已经加载页面 ,我就可以在Lynx中使用“转到”选项,不用担心!我可以像lynx $url -goto
这样禁用它,但如果可以避免的话,宁愿不这样做。
禁用Web实用程序不是一种选择,是否有办法再次确保此安全?
答案 0 :(得分:1)
例如,如果您传递/home
,˜/
和file://
,Lynx将列出您的主目录。但是,如果您通过home
,Lynx会将其重写为 www.home.com 。所以:
/
,˜/
和file://
但是,让我们考虑一下,在与Lynx相同的目录中有一个名为home
的文件。它将显示您的文件。所以:
http(s)://
(如果不存在)实际上,您可以通过将前缀 http:// 增强为所有URL(例如http:// file:// 或http)来解决所有问题:// 〜/ 没有任何意义。
请查看how Lynx handles various types of URL和URL_DOMAIN_PREFIXES/SUFFIXES。
答案 1 :(得分:0)
经过更多测试,我已经能够提出以下解决方案,
它不是很漂亮,但是可以在不减少功能的情况下运行:
read -r -p "Web Address: " url
if [ "$url" == "" ]
then
lynx "https://analogfiles.ml" -accept_all_cookies -restrictions=bookmark,bookmark_exec,chdir,disk_save,dired_support,dotfiles,editor,exec,file_url,inside_ftp,lynxcfg_info,lynxcgi,mail,outside_telnet,print
elif [ "${url:0:1}" == "/" ] || [ "${url:0:1}" == "~" ] || [ "${url:0:7}" == "file://" ]
then
lynx "~http" -accept_all_cookies -restrictions=bookmark,bookmark_exec,chdir,disk_save,dired_support,dotfiles,editor,exec,file_url,inside_ftp,lynxcfg_info,lynxcgi,mail,outside_telnet,print
elif [ "${url:0:7}" == "http://" ] || [ "${url:0:8}" == "https://" ]
then
lynx $url -accept_all_cookies -restrictions=bookmark,bookmark_exec,chdir,disk_save,dired_support,dotfiles,editor,exec,file_url,inside_ftp,lynxcfg_info,lynxcgi,mail,outside_telnet,print
else
lynx "http://"$url -accept_all_cookies -restrictions=bookmark,bookmark_exec,chdir,disk_save,dired_support,dotfiles,editor,exec,file_url,inside_ftp,lynxcfg_info,lynxcgi,mail,outside_telnet,print
fi
第一部分处理主页(我将其设置为许多Lynx友好站点之一)。由于我的限制,按ENTER键将无法再使主页正常工作。
第二部分防止Lynx甚至接收到可能被视为本地的URL。这是因为即使通过标志启用了限制,山猫也不会对给定的URL生效!这意味着,如果Lynx接收到计算机本地的URL,例如file://home/
,即使被标志禁用,它也会允许它。我创建了一个名为http
的错误消息文件,但用户只是看到FTP错误消息,对我来说是可以的。
否则,如果URL缺少http://或https://,我将添加http://。
您可以通过键入lynx -restrictions
查看此处显示的限制,以提供更多信息。
您看到的最相关的限制是dired_support
,这是不允许导航到本地文件的限制(其他限制不是直接相关的,但是出于安全考虑,我没有理由允许它们,因此我不允许使用它们)。这意味着我可以继续允许使用GoTo,而不必担心可以通过这种方式访问本地文件,从而避免了在这里使用的if-else检查。实际上,仅由于Lynx无法对从Shell脚本访问的第一个URL正确应用限制,才需要进行if / else检查。
换句话说,我必须手动阻止使用if-else语句访问本地文件,然后信任Lynx将禁止访问其上的本地文件。