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

时间:2012-10-23 03:03:37

标签: 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>

我应该怎么做$ _POST ['first_name']才能使其安全而不易受攻击?

7 个答案:

答案 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.phphttp://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>