使用$ _POST进行按钮操作是否安全?

时间:2016-05-18 09:14:28

标签: php

使用$ _POST进行按钮操作是否安全?

代表

<button name="submit">Table A</button>

php(我的代码在这里做的是,如果我点击按钮(表A),那么表A 将会出现,默认情况下是不可见的。)

    if(isset($_POST['submit'])) {

        <table>
          code....
        </table>    

}

我的问题:安全吗?对攻击者?喜欢xss,sql注入,还是什么?我想要一个建议,以获得更安全的网站。 (或者至少比攻击者更安全)

4 个答案:

答案 0 :(得分:2)

如果您不回显输出或在SQL语句中未使用它,则它是安全的。你的代码也应该真的......

if(isset($_POST['submit'])) {
...
}

以避免错误(如果未设置)

答案 1 :(得分:0)

简短回答

NO

POST变量本身并不“安全”。

长答案:

在PHP脚本上验证POSTed变量有很多问题。最着名的是Cross Site Request Forgeries,其中值会发送到您的网页,但您不知道该值的来源或发送者。

要解决此问题,您需要设置一次性使用唯一键来发送和接收,通常使用PHP SESSIONS或最终用户无法触及的类似概念。

第二个问题是你永远不应该 永远 信任POSTed变量的内容。您需要fully escape the variable以及确保变量被赋予对代码的绝对最低限度的访问权限,因此如果它是受损的值,则希望它被清除和/或它不会损害您的脚本。

您的代码:

详细查看您的问题您遇到CSRF(上面的第1点),因为您的PHP代码不知道提交的按钮是否来自您的按钮所在的页面,因此PHP不知道浏览器是否应该见“表A”的内容。 (如果每个人都能看到它,为什么要把它隐藏起来?)

还有一个因素是,恶意的一方可以使用你的代码在很短的时间内(100,000秒超过2秒)向脚本发送许多POST的提交,导致DOS攻击,这也是由于存在无法验证POST的来源及其隐含的真实性。

进一步的观点:你需要澄清你认为“安全”的东西,这是一个非常相对的术语。

答案 2 :(得分:0)

开发人员始终要清理并验证他从请求中获取的输入

根据目的 - 您需要强制执行卫生设施或减少清洁工作(例如,对于DB,您需要另外清理/逃避,HTML输出以进行XSS保护等)。

您可以阅读:

  • 如何to sanitize the input(POST / GET变量,引荐,Cookie,用户代理和其他标题)
  • 跨站请求伪造(CSRF)预防;
  • 另外,您可能希望使用 Captcha 或其他自动提交保护等。

出于特定目的,在问题本身中 - 除了检查在线状态之外,您没有以任何方式使用$_POST['submit']的值,因此不需要进行额外验证,这样就可以了。

答案 3 :(得分:-1)

您可以使用POST按钮。但请确保您已验证操作的引荐来源网址。因为有人可能会尝试复制您的表单并循环提交。这将关闭您的网站。

因此,您应该检查引荐来源网址是否与您的网站网址匹配。

也总是使用表单令牌来验证表单(如验证码)