我需要一个在错误时保留其值的表单,但要确保输入数据的安全性是否干净。
<form action="" method="POST">
<div>
<label for="first_name">First Name</label>
<input type="text" name="first_name" value="$_POST['first_name']"/>
</div>
</form>
我应该怎么做$ _POST ['first_name']才能使其安全而不易受攻击?
答案 0 :(得分:6)
使用htmlspecialchars
删除任何可能的有害XSS攻击:
echo '<input type="text" name="first_name" value="'.htmlspecialchars($_POST['first_name']).'"/>';
答案 1 :(得分:0)
数据在上下文中容易受到攻击。例如,用户提交的HTML标记可以存储在数据库中。如果您将它们回显到浏览器,那么您就遇到了问题。因此,制作“不易受攻击”的东西有点宽泛。
要使用户数据安全回显到表单输入,请查看http://php.net/manual/en/function.htmlentities.php和http://php.net/manual/en/function.strip-tags.php
答案 2 :(得分:0)
不容易受到什么影响? SQL注入?
你想创建一个变量来清理数据,如果有的话,但是当你第一次加载页面时不会抛出错误(并且没有发布数据)
这样:
$fname = !empty($_POST['first_name']) ? cleanstuff($_POST['first_name']) : ''
<form>
...
<input...value="<?php echo $fname; ?>"/>
</form>
其中“cleanstuff”是清理数据所需的任何函数,mysql_real_escape_string()如果清理mysql数据库或htmlentities()或其他什么。最好是用户定义的函数,它可以完成业务逻辑所需的所有清理工作。
答案 3 :(得分:0)
<form action="" method="POST">
<div>
<label for="first_name">First Name</label>
<input type="text" name="first_name" value="<?php echo htmlentities $_POST['first_name']);"/>
</div>
</form>
在webform上使用htmlentities并使用* _real_escape_srting来处理服务器上的sql注入php代码
答案 4 :(得分:-1)
用htmlspecialchars($ _ POST [ '如first_name'])
这将转义字符串中的任何HTML。
答案 5 :(得分:-2)
清理数据不是一站式服务,正确验证所有输入非常重要,以下是所需的步骤:
$first_name = trim($_POST['first_name']); //remove spaces
$first_name = htmlspecialchars($first_name); //convert special chars to html entities (for XSS)
$first_name = mysql_real_escape_string($first_name); //escape quotes for MySQL
//Now it is important to validate the data (confirm that the name is a name, only contains characters which can be in a name
答案 6 :(得分:-4)
您可以使用许多不同的功能来清理输入的值。我推荐
<?php
//You have many options. You can use htmlspecialchars() to sanitize for XSS (Cross Site Scripting) and mysql_real_escape_string() to prevent SQL Injection. If you are using a MySQL database, I'd recommend both.
$name = mysql_real_escape_string(htmlspecialchars($_POST['first_name']));
?>
<form action="" method="POST">
<div>
<label for="first_name">First Name</label>
<input type="text" name="first_name" value="<? echo $name; ?>"/>
</div>