2

我需要一个在错误时保留其值的表单,但要确保输入数据是干净的安全明智的。

<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'] 以使其安全且不易受到攻击?

4

7 回答 7

6

用于htmlspecialchars消除有害 XSS 攻击的任何可能性:

echo '<input type="text" name="first_name" value="'.htmlspecialchars($_POST['first_name']).'"/>';
于 2012-10-23T03:08:36.327 回答
1

不受什么影响?SQL注入?

您想要创建一个变量来清理数据(如果有的话),但在您第一次加载页面时不会抛出错误(并且没有发布数据)

所以:

$fname = !empty($_POST['first_name']) ? cleanstuff($_POST['first_name']) : ''

<form>
...
<input...value="<?php echo $fname; ?>"/>
</form>

其中“cleanstuff”是清理数据所需的任何函数,mysql_real_escape_string() 如果清理 mysql 数据库或 htmlentities() 或其他什么。最好是一个用户定义的函数,它可以完成业务逻辑所需的所有清理工作。

于 2012-10-23T03:09:44.450 回答
0

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

为了使用户数据可以安全地回显到表单输入中,请查看http://php.net/manual/en/function.htmlentities.phphttp://php.net/manual/en/function。剥离标签.php

于 2012-10-23T03:08:51.713 回答
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 来处理服务器 php 代码上的 sql 注入

于 2012-10-23T03:11:28.283 回答
-1

htmlspecialchars($_POST['first_name'])

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

于 2012-10-23T03:06:41.440 回答
-1

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

$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
于 2012-10-23T03:09:44.527 回答
-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>

于 2012-10-23T03:08:43.423 回答