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

时间:2012-08-18 22:44:06

标签: php forms post escaping sanitize

我刚刚对输入数据进行消毒,但我们开始快速增加客户端数量,因此我们需要对所有用户输入进行消毒处理,以防万一,因为这是最佳做法。

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

为了简单起见,我想说我已经

$one = $_POST['one'];
$two = $_POST['two'];
$three = $_POST['three'];
$four = $_POST['four'];
$five = $_POST['five'];

修改 就在这里 - 这将被插入到元数据下的数据库中。然后我打电话给

然后我只是打电话

printf('The input for One is ' .$theNewVarForOne. '!');

但是那里存在潜在的恶意代码。剥离所有iffy输入的最佳方法是什么?

修改

我应该更具体一点。我基本上创建了一些存储在数据库中的“post”数据。标题,日期,身体等。

2 个答案:

答案 0 :(得分:3)

如果您要在屏幕上打印,那么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做任何有趣的事情到您的数据库)。我更喜欢使用PDO建立联系。

代码看起来像这样(从prepare上的文档中剪断):

<?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();
?>

答案 1 :(得分:0)

如果你要将它插入数据库,我建议你使用Fluffeh的方法,但是使用mysql_real_escape_string就可以快速解决问题。