我只是想知道这是否是处理表单提交的最安全和最好的方法,我正在努力寻找最“最安全”并提供给我的编码视图,
PHP
<?php
if(isset($_POST['submit'])) {
//Handle the form here with many $_POST['namehere']
}
?>
HTML
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
<label>Email</label>
<input name="email" type="text">
<label>Password</label>
<input type="password" name="password">
<label>Submit</label>
<input type="submit" name="submit">
</form>
这会被视为唯一可能做到这一点且最安全吗?
答案 0 :(得分:1)
这很难回答,因为代码不多,但是:
请勿使用PHP_SELF
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
不要这样做,或至少清理该值,因为使用原始值会使站点对XSS攻击开放!发布给自己可以这样简单地完成:
<form action="" method="POST">
或者,使用绝对(和静态)URI作为表单目标。
附录
不要让别人说你认为你在某种程度上受到了神奇的保护,因为你正在托管一个小网站,使用一些框架xyz或某些浏览器会阻止它。找出适合自己并采取适当行动。
在SSL上
如果您提交敏感数据,则应使用SSL!相比之下,别的什么都是个玩笑。
关于CSRF
导致网站状态发生变化并使用Cookie延续会话的表单应受CSRF令牌保护;令牌必须是表单提交的一部分,并在使用后重新生成。
关于SQL注入
Please, don't use mysql_*
functions in new code。它们不再被维护and are officially deprecated。请参阅red box?转而了解prepared statements,并使用PDO或MySQLi - this article将帮助您确定哪个。如果您选择PDO here is a good tutorial。
花絮(实际上与安全无关)
if(isset($_POST['submit'])) {
//Handle the form here with many $_POST['namehere']
}
此代码假设您的表单上始终有一个名为submit
的提交按钮。更通用的方法是使用这个条件:
if ($_SERVER['HTTP_METHOD'] === 'POST') {
// something was submitted
if (isset($_POST['email'], $_POST['password']) {
// email and password submitted
// you may still wish to verify whether a "valid" email was given
}
}
答案 1 :(得分:1)
为了增强表单的安全性,您应该考虑使用XSRF密钥/令牌。这些将使您域外网站的请求成功调用脚本变得更加困难。
答案 2 :(得分:1)
你可以提高几点!
<强> 1。不要使用PHP_SELF
将action-formtag留空
<form action='' method='post'>
<强> 2。逃避SQL字符
如果要使用数据库,则应该从String中转义SQL-chars。 使用:
[mysql_real_escape_string($string)][1]
检查数据类型的值
如果您的字段只需要完整的数字,则应删除所有字母。 您可以通过在变量前面的括号中写入所需类型来更改PHP变量的类型,如下所示:
$number=(int) $value;
答案 3 :(得分:0)
你在那里只有一张表格。它既不安全也不安全。 定义表单是否安全的方法是如何将数据传输到服务器以及如何处理服务器端的输入。
安全登录表单...
关于PHP_SELF
XSS漏洞利用:
htmlspecialchars($_SERVER['SCRIPT_NAME'])
。*情况
PHP_SELF
,因为包含攻击字符串的URL与任何允许的URL路由都不匹配。