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

标签 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. '!');

但是其中可能存在恶意代码。去除所有不确定输入的最佳方法是什么?

编辑:

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

最佳答案

如果您要打印到屏幕,那么 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();
?>

关于php - 清理所有已发布字段的正确方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12022783/

相关文章:

给定一系列任意数字的 PHP,如何在折线图上选择逻辑最大值?

php - Laravel 4.2 中具有定期付款的 PayPal 经典 API

forms - Controller Action 中的symfony2 : setting the value of a form field outside the form,

ASP.Net VB DropDownList 第一个值始终被选中

facebook - 2 月 6 日更改后发布到多个 friend 墙

Python请求post clyp.it上传文件

php - ZF2 ServiceLocatorAwareInterface getServiceLocator 给我 Zend\Validator\ValidatorPluginManager

php - 我有一个 PHP 代码,在执行时会给出错误。谁能指出我的错误。

javascript - Bootstrap 登录下拉菜单 "click"不工作

jquery - ajax post没有给出任何指示