如何将恶意代码文本插入数据库

时间:2011-11-06 17:08:34

标签: php sql

我想允许用户将他的数据存入文本。该文本字段将存储在数据库中。在以后的步骤中,此文本将显示在某些页面中。当然,以同样的方式,创建的用户。好的,考虑这个stackoverflow示例,我允许放任何代码或文本,任何东西;并且该代码或任何内容很简单地被其服务器忽略。这是怎么回事。

我的问题是,我无法信任用户..用户可以放任何东西..(可能是代码 - > sql或简单文本)。所以我打算使用mysql_real_escape_string(),但这个功能在恶意代码中加入了一些斜线。它很好..但我想把用户输入的字符串放入数据库,以便我以后可以使用它(不是那个消毒的字符串)。那我该怎么办? 实际上,我正在开发使用数据库类(this)的CMS我读到了PDO,但是利用这个概念可以让我改变一切。我想要一种除了PDO方法之外的方式。参数方法有利

2 个答案:

答案 0 :(得分:1)

将用户提供的内容插入数据库时​​,请使用查询参数或至少转义以阻止SQL injection。另请参阅我对What is SQL injection?

的回答

即使您将代码串安全地插入到数据库中,您也有第二个可能的漏洞:

显示内容时,请注意Cross-Site Scripting (XSS)的风险。当您在HTML输出中显示数据库中的内容时,它可能包含HTML标记或作为网页一部分执行的Javascript代码,而不是显示代码。

为了帮助防止XSS,您必须使用HTML实体转换标记打开字符,例如<应输出为&lt;。这可以确保它显示为文字'&lt;'并且不会被用户的浏览器解释为另一个标记。

答案 1 :(得分:0)

这是一个例子

if (isset($_POST['userdata'])) {
   $safestring= base64_encode($_POST['userdata']);

   mysql_query("UPDATE table_name SET value_name = '$safestring'
   WHERE some_username = 'username'");
}