Jak*_*ake 3 html javascript php mysql
我目前正在使用以下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;}
Run Code Online (Sandbox Code Playgroud)
我真的想知道所使用的代码是否足够安全,可以将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;}
Run Code Online (Sandbox Code Playgroud)
首先,您应该更改检查的位置get_magic_quotes_gpc以规范化函数正在处理的数据.如果您的应用程序不依赖于它会更好,但是如果启用了该选项则拒绝工作 - 如果您关心安全性,请在此处查看此重要信息.
但是为了发布代码的安全性,我们首先将输入值规范化为函数,然后再进行处理.这是通过将检查移动到函数顶部来完成的.
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;
}
Run Code Online (Sandbox Code Playgroud)
在这个修改过的函数中,魔术引号(你不应该使用它)已被移到它的顶部.这可确保无论该选项是打开还是关闭,数据始终都会被处理.您的功能没有这样做,它会为传递的相同数据创建不同的结果.所以这已得到修复.
即使功能现在看起来更好,它仍然有很多问题.例如,目前还不清楚该功能实际上做了什么.它同时做了很多事情,其中一些是矛盾的:
$data不应包含HTML的标记$data实际上包含HTML实体.那么数据应该是什么?是不是HTML?如果事情变得不清楚,它不会引入更多的安全性,因为这将有利于错误进入您的程序,最终甚至通过您的安全预防措施.
所以你应该抛弃代码并考虑以下内容:
因此,如果您想让您的代码更安全,那么这不是要将一堆函数放到某些数据上,因为您认为这些是安全相关的.通过这样做,您不会使您的软件更安全,但安全性更低.
| 归档时间: |
|
| 查看次数: |
2048 次 |
| 最近记录: |