阻止对Lynnx

时间:2019-06-24 02:13:51

标签: bash lynx

我正在运行一个主要由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 /

然后继续转储我的根目录列表。

  • 如果前4个字符不是http或前5个字符不是https,则会自动在前面加上http://-这仍将允许用户省略URL的http://部分。

但是,我意识到这还不够。用户仍然可以在目录中键入本地文件的名称。我在调用该脚本的目录中键入了外壳脚本的名称,然后Lynx吐出了bash脚本的内容。

最重要的是,一旦已经加载页面 ,我就可以在Lynx中使用“转到”选项,不用担心!我可以像lynx $url -goto这样禁用它,但如果可以避免的话,宁愿不这样做。

禁用Web实用程序不是一种选择,是否有办法再次确保此安全?

2 个答案:

答案 0 :(得分:1)

例如,如果您传递/home˜/file://,Lynx将列出您的主目录。但是,如果您通过home,Lynx会将其重写为 www.home.com 。所以:

  1. 如有需要,请删除前导/˜/file://

但是,让我们考虑一下,在与Lynx相同的目录中有一个名为home的文件。它将显示您的文件。所以:

  1. 根据需要添加http(s)://(如果不存在)

实际上,您可以通过将前缀 http:// 增强为所有URL(例如http:// file:// 或http)来解决所有问题:// 〜/ 没有任何意义。

请查看how Lynx handles various types of URLURL_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将禁止访问其上的本地文件。