如果URL作为输入参数提交,则Apache会阻止请求

时间:2017-07-23 16:14:27

标签: php apache .htaccess http security

我一直在网上搜索,但令人惊讶的是,任何人都没有提出单一答案或单一查询,我是唯一一个面临这个问题的人。可能是因为当我们说表格中的网址时谷歌会给出所有相关的结果'属性'形式。但在这里,我根本不是在谈论行动网址。所以我将从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"]; ?>

它只发生在certhosting服务器上,在我的本地它工作正常,有点猜测和研究给了我这一个原因,apache有这个安全协议,如果启用不会让你,提交有害的东西。它阻止了我的任何网址,即使是提交&#34; http://hey&#34;它被阻止所以问题也不在于url。

我的托管服务提供商已准备好为我禁用该规则,但这将是我自己的风险。所以我显然不希望这样。

所以现在我的问题是为什么那里的安全性,如果真的是威胁,真正想要真正做到这一点的人会怎么做呢?

对于纯HTML表单提交,我根本找不到解决方案。但对于基于ajax的请求,我找到了一些解决方案。 首先,我尝试编码/解码哪个不起作用,因为服务器首先尝试找到其中包含http://的编码子查询。所以不用了

另一个解决方案是提交ht $$ p://然后在我的php脚本中修复它。但它的所有解决方法,并迫使我使用基于Ajax。如果只想以HTML格式进行操作,我的应用程序就不会有JavaScript。

任何?

2 个答案:

答案 0 :(得分:0)

不确定如何在没有javascript的情况下执行此操作,但是您可以使用javascript从网址中删除“http:”并提交它将起作用,并且众所周知,//无论如何都会告诉您启动网址。< / p>

通过@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

答案 1 :(得分:-1)

您可以在通过表单发布之前通过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"]); ?>