使用$ _POST进行按钮操作是否安全?
代表
<button name="submit">Table A</button>
php(我的代码在这里做的是,如果我点击按钮(表A),那么表A 将会出现,默认情况下是不可见的。)
if(isset($_POST['submit'])) {
<table>
code....
</table>
}
我的问题:安全吗?对攻击者?喜欢xss,sql注入,还是什么?我想要一个建议,以获得更安全的网站。 (或者至少比攻击者更安全)
答案 0 :(得分:2)
如果您不回显输出或在SQL语句中未使用它,则它是安全的。你的代码也应该真的......
if(isset($_POST['submit'])) {
...
}
以避免错误(如果未设置)
答案 1 :(得分:0)
简短回答
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保护等)。
您可以阅读:
出于特定目的,在问题本身中 - 除了检查在线状态之外,您没有以任何方式使用$_POST['submit']
的值,因此不需要进行额外验证,这样就可以了。
答案 3 :(得分:-1)
您可以使用POST按钮。但请确保您已验证操作的引荐来源网址。因为有人可能会尝试复制您的表单并循环提交。这将关闭您的网站。
因此,您应该检查引荐来源网址是否与您的网站网址匹配。
也总是使用表单令牌来验证表单(如验证码)