【发布时间】:2017-12-09 19:42:14
【问题描述】:
我正在学习 php,并且一直在关注 phpbridge.org 的 OOP 创建数据类教程
在教程中,他们从帖子中获取表单数据并将其插入数据库。
代码如下:
第 1 步:表单
<h2>New Topic</h2>
<form action="add.php" method="POST">
<label>
Title: <input type="text" name="title">
</label>
<br>
<label>
Description:
<br>
<textarea name="description" cols="50" rows="20"></textarea>
</label>
<br>
<input type="submit" value="Add Topic">
</form>
第 2 步 PHP 文件
<?php
require 'TopicData.php';
if (isset($_POST) && sizeof($_POST) > 0) {
$data = new TopicData();
$data->add($_POST);
}
?>
第 3 步
TopicData.php中包含的函数
public function add($data)
{
$query = $this->connection->prepare(
"INSERT INTO topics (
title,
description
) VALUES (
:title,
:description
)"
);
$data = [
':title' => $data['title'],
':description' => $data['description']
];
$query->execute($data);
}
我的问题是关于安全性的。在将此数据插入数据库之前,通过 filter_input() 函数运行表单的每个字段不是最佳做法吗?这些也应该通过 filter_var() 运行吗?
如果有必要,过滤器代码到底是什么样的?
谢谢!
【问题讨论】:
-
您过滤的唯一原因是您是否对任何特定领域的内容有限制。您对标题或描述可以包含的内容有任何限制吗?
-
@tadman - 我对标题或描述没有限制。但是,我的印象是永远不要直接访问 $_Post 以确保安全始终使用 filter_input() 函数。这里描述:。 phparch.com/2010/07/never-use-_get-again
-
那篇文章可能来自石器时代,但也不全是错误的。问题是你需要限制一个类型,比如整数、浮点数或电子邮件,但对于普通的旧字符串,它更复杂。什么是“有效”?您通常需要在代码中更具体地定义它。
-
如果您关心验证并有一个标准化的方法来做这件事,大多数development frameworks 都有一个或多个系统来做这件事。例如,Laravel 有一个相当全面的data validation system,它不仅可以过滤,还可以验证最小和最大长度等内容。
-
@tadman 谢谢你的回复很有帮助。我希望我能找到一个使用 php 构建一个简单的 Web 应用程序的教程,该教程提供