如何保护在表单错误中保留值的PHP表单?

如何保护在表单错误中保留值的PHP表单?,php,html,forms,Php,Html,Forms,我需要一个表单,它在出错时保留它的值,但确保输入数据是干净的、安全的 <form action="" method="POST"> <div> <label for="first_name">First Name</label> <input type="text" name="first_name" value="$_POST['first_name']"/> </div>

我需要一个表单,它在出错时保留它的值,但确保输入数据是干净的、安全的

<form action="" method="POST">
    <div>
         <label for="first_name">First Name</label>
         <input type="text" name="first_name" value="$_POST['first_name']"/>
    </div>
</form>

名字
我应该如何处理$\u POST['first\u name']以使其安全且不易受攻击?

htmlspecialchars($\u POST['first\u name']))

这将转义字符串中的任何HTML。

用于删除任何可能的有害XSS攻击:

echo '<input type="text" name="first_name" value="'.htmlspecialchars($_POST['first_name']).'"/>';
echo';

您可以使用许多不同的功能来清理输入值。我推荐

<?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>

数据在上下文中易受攻击。例如,用户提交的HTML标记可以存储在数据库中。如果您将它们回显到浏览器,那么您就有问题了。出于这个原因,让某些东西“不易受攻击”有点宽泛


要使用户数据安全地回显到表单输入中,请查看和

不易受什么影响?SQL注入

您希望创建一个变量,该变量将清除数据(如果有),但在首次加载页面时不会抛出错误(并且没有post数据)

因此:

$fname=!空($_POST['first_name'])?清洁用品($_POST['first_name']):“”
...

消毒数据不是一站式服务,正确验证所有输入非常重要,以下是所需步骤:

$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

名字

转义变量,使其在页面上正确呈现,并且不会破坏HTML,这就是您在这里应该做的所有事情。您假设他将其放入MySQL数据库并使用一个旧的/未维护的函数!XSS呢-1
mysql\u real\u escape\u string()
用于在使用
mysql\u*
库连接到mysql数据库时,在SQL查询中注入输入字符串时对其进行转义。这对于转义HTML输出以抵抗和类似的攻击是没有用的。重要的是,只执行您使用数据所需的操作。对于这个问题,这意味着确保它是HTML安全的,对于数据库来说不安全,并且没有被修剪。我将假设,并且希望,表单的目的不是向输入文本的用户显示用户的名字。因此,根据对数据的处理,可以删除或添加每行的注释。我还假设不知道如何使输入“HTML安全”的人不知道保护其web应用程序的下一步步骤。我假设投票被否决的人是投票支持htmlspecialchars解决方案的人,该解决方案没有上下文意识,也没有提及数据验证。
$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
<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>