我目前正在使用以下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的最安全的方法是什么?
- Vue element ui用户展示页面的实例 2023-07-09
- vue框架基本语法 2023-10-08
- javascript – 在HTML5 Web SQL数据库中对日期时间进行排序 2023-10-26
- 详解CSS故障艺术 2022-11-20
- ajax数据传输方式实例详解 2022-10-18
- Ajax 入门之 GET 与 POST 的不同处详解 2023-01-31
- AJax与Jsonp跨域访问问题小结 2022-10-18
- HTML5实战与剖析之触摸事件(touchstart、touchmove和touchend) 2022-11-13
- linux – 使用HTML的GUI库或Window Manager 2023-10-25
- Vue中的前后台交互 2023-10-08