Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 清理所有已发布字段的正确方法?_Php_Forms_Post_Escaping_Sanitize - Fatal编程技术网

Php 清理所有已发布字段的正确方法?

Php 清理所有已发布字段的正确方法?,php,forms,post,escaping,sanitize,Php,Forms,Post,Escaping,Sanitize,我不熟悉清理输入数据,但我们开始迅速增加客户端数量,因此我们需要清理所有用户输入,以防万一,因为这是一种最佳做法 如果我有一个发布12个字段的表单,那么什么是最好和最便宜的清理方法 为了简单起见,假设我有 $one = $_POST['one']; $two = $_POST['two']; $three = $_POST['three']; $four = $_POST['four']; $five = $_POST['five']; 编辑: 就在这里-这将被插入到元数据下的数据库中。然后我

我不熟悉清理输入数据,但我们开始迅速增加客户端数量,因此我们需要清理所有用户输入,以防万一,因为这是一种最佳做法

如果我有一个发布12个字段的表单,那么什么是最好和最便宜的清理方法

为了简单起见,假设我有

$one = $_POST['one'];
$two = $_POST['two'];
$three = $_POST['three'];
$four = $_POST['four'];
$five = $_POST['five'];
编辑: 就在这里-这将被插入到元数据下的数据库中。然后我打电话给

那我就给你打电话

printf('The input for One is ' .$theNewVarForOne. '!');
但其中存在潜在的恶意代码。去除所有不确定输入的最佳方法是什么

编辑:


我应该说得更具体些。我基本上是在创建一些存储在数据库中的“post”数据。标题、日期、正文等。

如果要在屏幕上打印,则HTMLspecialchars应该可以:

echo htmlspecialchars($_POST['one']);
它将任何潜在的恶意javascript和HTML转换为类似
的字符,以便在源代码中显示为文本(意味着无法执行),并且对用户而言,它看起来像屏幕上显示的原始输入:

<?php
$new = htmlspecialchars("<a href='test'>Test</a>", ENT_QUOTES);
echo $new; // &lt;a href=&#039;test&#039;&gt;Test&lt;/a&gt;
?>

另一方面,如果要插入数据库,则需要做一些额外的工作

当插入到数据库中时,您确实需要使用准备好的语句(这将阻止任何人对您的数据库执行SQL操作)。我更喜欢用它来建立我的联系

代码如下所示(从上的文档中剪下):



如果您要将其插入数据库,我建议您使用Fluffeh的方法,但要使用一种肮脏的快速解决方法。

请参阅我的答案:不要过早地逃逸数据。如果您正在输出变量数据(用户是否提供!),请使用
htmlspecialchars()
。不要这样做。。。转到准备好的查询路径。这样,错误就不会发生。首先,一个人不应该在一个帖子上发送任何输出。其次,对POST变量执行htmlspecialchars()是毫无意义的。黑客将JavaScript注入到他自己会看到的页面中,一无所获。重点应放在确保已保存到数据库中的文本正确转义上。这就是JavaScript注入可能导致会话劫持的原因。
<?php
/* Execute a prepared statement by passing an array of values */
$sql = 'SELECT name, colour, calories
    FROM fruit
    WHERE calories < :calories AND colour = :colour';
$sth = $dbh->prepare($sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$sth->execute(array(':calories' => 150, ':colour' => 'red'));
$red = $sth->fetchAll();
$sth->execute(array(':calories' => 175, ':colour' => 'yellow'));
$yellow = $sth->fetchAll();
?>