Apache блокирует запрос, если URL-адрес представлен как входной параметр

Я искал в Интернете, но, как ни удивительно, ни один ответ, ни один запрос не были подняты кем-либо, я единственный, кто столкнулся с этой проблемой. Может быть, потому что, когда мы говорим о URL-адресе в форме, Google дает все связанные с результатами «атрибуты» формы. Но здесь я вообще не говорю о действительном URL. поэтому я начну с html-кода.

<form action="/something_that_does_not_matter" method=post> <input name="profile" type="text" placeholder="Enter name"/> <input name="link" type="text" placeholder"="Enter URL"/> </form> 

Эта форма отлично работает, если пользователь вводит некоторые строки на обоих входах. Когда это становится проблемой? Когда вы вводите какой-либо URL-адрес в поле ссылки. потому что это то, что должно делать. Пожалуйста, не просите меня рассказать сценарий здесь, потому что я на 100% уверен, что на сервере не проблема, поскольку я даже пробовал простейший php, например

 <?php echo $_POST["link"]; ?> 

Это происходит только на сертифицированном сервере-хостинге, на моем локальном компьютере он работает отлично, немного угадывание и исследование дали мне эту единственную причину, что у apache есть этот протокол безопасности, который, если он не позволит вам, представить что-то вредное. И он блокирует мой любой URL-адрес, даже если он отправляет « http: // hey », он блокируется, поэтому проблема не связана с URL-адресом.

Мой хостинг-провайдер готов отключить это правило для меня, но тогда это будет мой собственный риск. поэтому я не хочу этого явно.

Итак, теперь мой вопрос заключается в том, почему безопасность там, и если это действительно угроза, как это делает кто-то, кто действительно хочет по-настоящему сделать это?

Для представления чистой HTML-формы я вообще не могу найти решение. Но для запроса на основе ajax я нашел некоторые решения. Сначала я попытался кодировать / декодировать, что не работает, поскольку сервер сначала пытается найти эту закодированную подстроку, которая имеет http: // в ней. Поэтому не использовать

Другое решение – отправить ht $$ p: //, а затем исправить его в моем PHP-скрипте. но его все обходное решение и заставляет меня использовать Ajax. что, если просто захотите сделать это в HTML-форме, мое приложение не будет содержать JavaScript.

Кто угодно?

Не уверен, как это сделать без javascript, но вы можете вычеркнуть «http:» из url, используя javascript, и отправить его, он будет работать, и, как мы все знаем, // в любом случае расскажет вам об запуске URL-адреса.

Внесение изменений в код by @Aayaush

 <input type="text" placeholder="Enter URL" onkeyup="document.getElementById('link').value=(this.value).replace(/https?:/,'')" > <form> <input name="profile" type="text" placeholder="Enter name"/> <input name="link" id='link' type="hidden"> <input type="submit"> </form> 

Также проверьте это. https://stackoverflow.com/a/39375297/3335776

Вы можете кодировать ввод через javascript перед отправкой его через форму, вы можете использовать что-то вроде следующего:

 <input name="link" type="text" placeholder="Enter URL" onkeyup="document.getElementById('link').value=btoa(this.value)" > <form> <input name="profile" type="text" placeholder="Enter name"/> <input name="link" id='link' type="hidden"> <input type="submit"> </form> 

при этом URL-адрес получает base64 и не будет обнаружен Apache в качестве URL-адреса, поэтому его можно передать. Поскольку скрытый тег ссылки скрыт в HTML-странице, он будет доступен на странице PHP.

В скрипте PHP к ссылке можно получить следующий код:

 <?php echo base64_decode($_POST["link"]); ?>