沃梦达 / IT编程 / 前端开发 / 正文

php – 将html / css / js添加到mysql的最安全的方法是什么?

我目前正在使用以下PHP类将html,css和javascript代码存储到我的mysql数据库中.function filter($data) {$data = trim(htmlentities(strip_tags($data)));if (get_magic_quotes_gpc())$data = stripslashes($data);$...

我目前正在使用以下PHP类将html,css和javascript代码存储到我的mysql数据库中.

function filter($data) {
$data = trim(htmlentities(strip_tags($data)));

if (get_magic_quotes_gpc())
    $data = stripslashes($data);
    $data= strip_tags($data);

$data = mysql_real_escape_string($data);

return $data;}

我真的想知道所使用的代码是否足够安全,可以将HTML / CSS / JS代码存储在mysql数据库中?

解决方法:

是的,MySQL可以在技术上安全地存储任何类型的文本.这意味着,MySQL将按原样保存文本,并在不丢失任何数据的情况下再次返回.

Mysql在文本内容之间没有区别,因此如果它是HTML,CSS,JS代码或您的朋友最后一封电子邮件则没有区别.

但是,如果稍后输出文本,则应该注意从mysql中提取数据后没有不需要的代码注入.但这实际上与MySQL没有关系.

为了使您的SQL更安全,请将数据库句柄传递给mysql_real_escape_string,甚至更好地使用MySQLi和/或PDO以及准备好的语句.

你的代码

你的代码看起来像是在试图阻止某些东西,但最终它变得非常无用:

function filter($data) {
$data = trim(htmlentities(strip_tags($data)));

if (get_magic_quotes_gpc())
    $data = stripslashes($data);
    $data= strip_tags($data);

$data = mysql_real_escape_string($data);

return $data;}

在处理数据之前规范化数据

首先,您应该更改get_magic_quotes_gpc检查的位置,以规范化函数正在处理的数据.如果你的应用程序不依赖于它会更好,但是如果启用了该选项则拒绝工作 – 如果你关心安全性,则为see this important information here about that.

但是为了发布代码的安全性,我们首先将输入值规范化为函数,然后再进行处理.这是通过将检查移动到函数顶部来完成的.

function filter($data)
{
   // normalize $data because of get_magic_quotes_gpc
   $dataNeedsStripSlashes = get_magic_quotes_gpc();
   if ($dataNeedsStripSlashes)
   {
     $data = stripslashes($data);
   }

   // normalize $data because of whitespace on beginning and end
   $data = trim($data);

   // strip tags
   $data = strip_tags($data);

   // replace characters with their HTML entitites
   $data = htmlentities($data);

   // mysql escape string    
   $data = mysql_real_escape_string($data);

   return $data;
 }

在这个修改过的函数中,魔术引号(你不应该使用它)已被移到它的顶部.这可确保无论该选项是打开还是关闭,数据始终都会被处理.您的功能没有这样做,它会为传递的相同数据创建不同的结果.所以这已得到修复.

更多功能问题

即使功能现在看起来更好,它仍然有很多问题.例如,目前还不清楚该功能实际上做了什么.它同时做了很多事情,其中??一些是矛盾的:

>它删除HTML标记,这表示$data不应包含HTML
>但是你转换$data的文本实际上包含HTML实体.

那么数据应该是什么?是不是HTML?如果事情变得不清楚,它不会引入更多的安全性,因为这将有利于错误进入您的程序,最终甚至通过您的安全预防措施.

所以你应该抛弃代码并考虑以下内容:

>如果您的应用程序输入无效,请不要对其进行过滤.而是防止进一步使用无效输入.因此,在使用输入之前,需要一个函数来验证输入.
>不要仅因为您认为这可能会使某些内容更安全而更改数据.而是在需要和适当的地方更改和编码数据.

>使您的应用程序仅使用魔术引号.非常不鼓励依赖此功能.然后,您无需在代码中检查全部内容.
>要在数据库中安全地存储内容,请仅在查询中使用它之前转义数据.不在您申请的其他地方.使用Prepared语句.
>如果数据有效,则无需在将数据放入数据库之前进行纠缠.但是在将其输出到网页时需要对其进行正确编码.并且只有应用程序确实知道这需要哪种编码.将数据放入数据库时??,您不知道.

因此,如果您想让您的代码更安全,那么这不是要将一堆函数放到某些数据上,因为您认为这些是安全相关的.通过这样做,您不会使您的软件更安全,但安全性更低.

>永远不要信任用户数据.
>确保数据采用您在处理之前所需的格式.
>在正确的位置使用正确的工具.
>绝不使用工具.获取知识,不仅支付安全性.

本文标题为:php – 将html / css / js添加到mysql的最安全的方法是什么?