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

2023-12-13

我目前正在使用以下 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 and/or 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标准化函数正在处理的数据。如果您的应用程序不依赖它,而只是在启用该选项时拒绝工作,那就更好了 -请参阅此处的重要信息如果你关心安全。

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

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 与否?如果事情变得不清楚,它不会引入更多的安全性,因为这将有利于程序中出现错误,甚至最终通过安全预防措施。

因此,您应该扔掉代码并考虑以下事项:

  • 如果您的应用程序的输入无效,请不要过滤它。相反,防止进一步使用无效输入。因此,在使用输入之前,您需要一个函数来验证输入。
  • Don't change data just because you think this might make something more secure. Instead change and encode data where it is needed and appropriate.
    • 让您的应用程序仅在关闭魔术引号的情况下工作。强烈建议不要依赖此功能。然后就不需要在代码中检查所有内容。
    • 要在数据库中安全地存储某些内容,请在仅在查询中使用数据之前转义数据。不在您的应用程序的其他地方。为此使用准备好的语句。
    • 如果数据有效,则在将数据放入数据库之前无需对其进行争论。但输出到网页时需要正确编码。并且只有应用程序才知道需要采用哪种编码。当您将数据放入数据库时​​您并不知道这一点。

因此,如果您想让代码更安全,这并不是将一堆函数扔到某些数据上,因为您认为这些函数与安全相关。这样做不仅不会使您的软件变得更安全,反而会降低其安全性。

  1. 永远不要相信用户数据。
  2. 确保数据采用您需要的格式预先处理.
  3. 在正确的地方使用正确的工具来完成工作。
  4. 切勿凭猜测使用工具。相反,获取知识,这不仅会带来安全方面的好处。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 html/css/js 添加到 mysql 最安全的方法是什么? 的相关文章

  • 使用 yum 和 pear 安装 php-soap 均失败

    我正在尝试在 Centos 6 4 服务器上安装 PHP 的 SOAP 扩展 我对包管理器 从 CLI 安装包并在 PHP 中配置它们相当不熟悉 我相当有能力管理 php ini 和其他 PHP 配置文件 soap ini 等 我尝试使用以
  • 将输入中每个单词的第一个字符设为大写

    我想知道如何在输入区域自动生成单词的第一个字符 目前我的代码是 Name
  • 如何知道浏览器空闲时间?

    如何跟踪浏览器空闲时间 我用的是IE8 我没有使用任何会话管理 也不想在服务器端处理它 这是纯 JavaScript 方法来跟踪空闲时间 并在达到一定限制时执行一些操作 var IDLE TIMEOUT 60 seconds var idl
  • 将 onclick 事件应用于页面加载时不存在的元素

    我将列表样式设置为看起来像选择框 并且当用户单击列表中的元素时我想触发一个函数 但是该元素是通过加载的AJAX因此 当页面加载并且我无法绑定时不存在onclick事件到它onDomReady 如果我把它作为一个普通的选择列表 我可以只标记一
  • 为什么 Array.prototype.filter() 在 Magnolia JavaScript 模型中抛出错误?

    我正在尝试过滤 FreeMarker 列表Magnolia JavaScript 模型 https documentation magnolia cms com display DOCS61 How to work with JavaScr
  • 设置大型电子邮件通知系统有哪些方法?

    我的公司有一个用 PHP 构建的网站 我们使用内置的 PHP 电子邮件功能每天向订阅者发送数千封电子邮件 这是一个糟糕的主意 它堵塞了我们的服务器 并且需要几个小时才能完成整个批次 现在我已经研究过像 MailChimp 这样的群发邮件服务
  • PHP 中的encodeURI() ?

    PHP 中是否有一些不编码的encodeURI 函数 我现在用这个 function encodeURI url http php net manual en function rawurlencode php https develope
  • 如何为 TBODY 应用垂直滚动条

    我的表中有 4 列和 5 行数据 我必须为 TBODY 应用垂直滚动条 TH 标题内容不应滚动 我对场景进行了编码 并且在我将滚动类应用于 TBODY 之前它工作正常 一旦我将滚动样式类应用于 TBODY 它就会破坏之前的对齐方式 任何人都
  • JavaScript 中的实时摩尔斯电码转换器

    在看到谷歌关于莫尔斯电码 gmail 的愚人节笑话后 我想我应该尝试用 javascript 创建一个实时莫尔斯电码转换器 我正在使用正则表达式和替换将莫尔斯电码更改为字符 例如 replace g a replace g r 我遇到的问题
  • 是否可以将请求标头添加到 CORS 预检请求中?

    我有一个从外部服务器 不是服务器 访问 API 的网站 为网站提供服务 通过简单的XmlHttpRequest 见下文 那个API 需要将用于访问服务的 API 密钥添加为请求标头 然而 正如这些CORS https developer m
  • Aurelia - 仅 HTML 自定义元素的内联定义

    我的 Aurelia 视图模型中有一个递归对象 如下所示 Class BottomlessPit Name string MorePits BottomlessPit null 因此 我想在 Aurelia 视图中使用递归模板 它只会在一个
  • 弹出窗口的动态高度取决于内容,可能吗?

    是否有可能获得一个宽度始终为 400px 的弹出窗口 但根据弹出窗口中的内容动态高度 我已经看到了这个 但不知道如何将其应用到弹出窗口 调整 iframe 的宽度高度以适应其中的内容 https stackoverflow com ques
  • Javascript 中 if 语句中的假值?

    过去两周 我在学校研究 JavaScript 的事情已经有一段时间了 而且我一直在做我的作业 在 Douglas Crockford 所著的 JavaScript The Good Parts 一书中 作者在第 11 页上列出了 if 语句
  • 在webview android中加载本地html文件

    我正在尝试在 android 的 webview 中加载 html 文件的内容 但是 它给了我 网页不可用错误 如果我尝试使用谷歌或雅虎等网站 它们就会起作用 html文件位于src gt main gt assests gt index
  • 禁用 WooCommerce 手动/编辑订单的电子邮件通知

    需要 WooCommerce 专业知识 我需要禁用手动创建的订单的电子邮件通知 我必须使用处理状态 由于处理订单状态的自定义挂钩 我无法创建自定义状态 理想情况下 手动订单页面中可以勾选一个复选框 勾选后 它将禁止在每种状态下向客户发送电子
  • 搜索多维数组 JavaScript

    我有一个如下所示的数组 selected products 0 r1 7up 61 Albertsons selected products 1 r3 Arrowhead 78 Arrowhead selected products 2 r
  • Readfile 从大文件中读取 0 字节?

    我正在尝试通过以下方式发送一个大文件readfile 但是 没有任何内容发送到浏览器 并且readfile 回报0 not false 我尝试发送的文件大小为 4GiB 并且可由 PHP 读取 我正在设置set time limit 0 以
  • ReactJs 警告:不推荐使用改变“style”。考虑事先克隆它

    我收到以下警告 inWarning div was passed a style object that has previously been mutated Mutating style is deprecated Consider c
  • DOM 解析器 Chrome 扩展内存泄漏

    问题 我开发了一个扩展程序 可以拦截 Web 请求 获取 Web 请求来源的 HTML 并对其进行处理 我使用 DOMParser 来解析 HTML 并且意识到 DOMParser 正在导致大量内存泄漏问题 最终导致 chrome 扩展崩溃
  • 如何将变量插入 PHP 数组?

    我在网上查了一些答案 但都不是很准确 我希望能够做到这一点 id result id info array id Example echo info 0 这有可能吗 您需要的是 不推荐 info array id Example varia

随机推荐