После дополнительных испытаний я смог найти следующее решение:
Это не красиво, но работает без снижения функциональности:
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-адрес, который можно считать локальным. Это связано с тем, что даже при включенных ограничениях с помощью флагов , Lynx не вводит их в действие для данного URL! Это означает, что если Lynx получит локальный для компьютера URL-адрес, такой как file://home/
, он разрешит его, даже если он отключен с помощью флагов. Я создал файл сообщения об ошибке http
, но пользователи просто видят сообщение об ошибке FTP, которое мне подходит.
В противном случае, если URL отсутствует http: // или https://,, я добавлю http: // on.
Ограничения, которые вы видите здесь, можно просмотреть, набрав lynx -restrictions
, который предоставляет дополнительную информацию.
Наиболее релевантное ограничение, которое вы видите, это dired_support
, которое запрещает переход к локальным файлам (другие ограничения не имеют прямого отношения, но я не видел причин разрешать их, поэтому для безопасности я их запретил). Это означает, что я могу продолжать разрешать использование GoTo, не беспокоясь о том, что таким образом можно получить доступ к локальным файлам, обходя проверки if-else, которые я здесь использую. Фактически, проверки if / else необходимы только потому, что Lynx не может должным образом применить ограничения для первого URL-адреса, доступного из сценария оболочки.
Другими словами, я должен вручную запретить доступ к локальным файлам с помощью моих операторов if-else, а затем доверять Lynx, чтобы запретить доступ к локальным файлам по ним.