PDO准备语句来存储HTML内容(PDO prepared statements to store

2019-06-23 18:05发布

我正在寻找一种方法来处理准备语句中的HTML内容。

我的应用程序提供了一个基本的所见即所得的编辑器和用户后,保存内容我的脚本保存的HTML数据在SQLite数据库。

但是,如果使用事先准备好的声明我'我的HTML得到-naturally-逃脱。

这是我到目前为止:

try {

    /* Create databases and open connections */
    $dbh = new PDO( 'sqlite:db/coaching.sqlite' );

    /* Set Error Mode for Exception Handling */
    $dbh->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );

    /* Prepare SQL Statement */
    $query = $dbh->prepare( "UPDATE Content SET Value=:value WHERE Token=:token" );

    /* Bind Param to Statement */
    $query->bindParam( ':token', $_POST['id'], PDO::PARAM_STR);
    $query->bindParam( ':value', $_POST['value'], PDO::PARAM_STR);

    /* Execute Query */
    $query->execute();

    /* Echo Data */
    echo $_POST['value'];

    /* Close connections to Database */
    $dbh = NULL;

}
catch( PDOException $e ) {

    /* Print Error-Messages */
    echo $e->getMessage();
}

Answer 1:

准备的语句不要逃避变量。 的命令和变量被同时但是独立传输到数据库。 如果你看到在数据库中的数据逃了出来,还有另外一个原因。 例如magic_quotes开启。 你可以重复get_magic_quotes_gpc在你的脚本,看看他们是开或关? 如果他们在,你可以使用设置它们赶走不同的技术 。 这将解决这个问题。

Additionaly,下面您的评论,预处理语句做防止 SQL注入攻击 ,所以你不必担心你的逃跑变量。 什么可能是很难理解的是准备好的语句的工作方式。 假设你有一个查询:

$query = "SELECT `id` FROM `users` WHERE `login` = '" . $login . "' AND `password` = '" . $password ."'";

$login$password传递给查询直接,因为它们。 如果有人试图通过mylogin' --$login ,查询变为:

$query = "SELECT `id` FROM `users` WHERE `login` = 'mylogin' -- ' AND `password` = 'anypassword'";

并且是发送到数据库。 这样,攻击者可以访问任何帐户。

什么编写的语句做,他们independly传递查询的查询参数。 然后将其转移到数据库查询不是建变量。 相反,变量被转移莫名其妙旁边查询。 他们在查询中引用。 通过这种方式,查询无法都不是蓄意还是无意欺骗。

随着准备好的声明中所示例$login将被转移的是,并不会影响查询结构。

如果有可能用飞机接载乘客,乘客其实并没有登机,将被称为“飞行准备的” :)乘客将不能影响的路线,并劫持了飞机。 他们将在与飞机降落在机场的目标已经出现。



Answer 2:

你试图存储编码的数据?

http://php.net/base64_encode

或http://php.net/serialize

如果使用前/使用DB后应工作



文章来源: PDO prepared statements to store html content