Php安全地从Web窗体向MySql插入数据

时间:2017-07-06 00:40:43

标签: php mysql security

我正在学习php并且一直在关注OOP,在phpbridge.org

创建数据类教程

在教程中,他们从帖子中获取表单数据并将其插入数据库。

以下是代码:

第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()来运行吗?

如果有必要,过滤器代码究竟是什么样的?

谢谢!

1 个答案:

答案 0 :(得分:0)

TopicData.php文件正在使用准备好的SQL查询。使用准备好的查询的好处是,如果SQL查询不基于外部输入,它将消除SQL注入的可能性。使用准备好的查询时,查询的模板将与数据分开发送。这有很多好处,如下所述:https://www.w3schools.com/php/php_mysql_prepared_statements.asp

它消除了对表单数据进行清理的需要。但是,如果需要验证,如最大字符串长度,最大值和最小值等,仍可能需要使用filter_var函数过滤表单数据。