当我将数据保存在数据库中时,我真的需要使用 mysql_real_escape_string 吗?

发布于 2024-11-30 08:14:07 字数 316 浏览 3 评论 0 原文

我正在使用 mysql_real_escape_string 将内容保存在 mySQL 数据库中。我保存的内容是通过表单的HTML。当我需要时,我删除并重新上传写入数据库的PHP文件。

为了正确显示我的 HTML 输入,我使用 stripslashes()

在其他情况下,当我在没有 mysql_real_escape_string 的情况下插入它时,我不使用 stripslashes()在输出上。

你的意见是什么? stripslashes 是否会严重影响性能?

I am using mysql_real_escape_string to save content in my mySQL database. The content I save is HTML through a form. I delete and re-upload the PHP file that writes in DB when I need it.

To display correctly my HTML input I use stripslashes()

In other case, when I insert it without mysql_real_escape_string, I do not use stripslashes() on the output.

What is your opinion? Does stripslashes affect performance badly ?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

回忆那么伤 2024-12-07 08:14:07

不要不要使用stripslashes()。它在安全性方面完全没有用,并且没有任何额外的好处。这种做法来自“魔术引号”的黑暗时代,这种做法已经成为过去,在下一个 PHP 版本中已被淘汰。

相反,仅过滤输入:

  • 字符串:mysql_real_escape_string($data)
  • 整数:(int)$data
  • 浮点数:(float)$data
  • 布尔值: isset($data) && $data

输出是另一回事。如果您要存储 HTML,则需要针对 javascript 过滤 HTML。

编辑:如果您必须执行stripslashes()才能使输出看起来正确,那么很可能您打开了魔术引号。一些 CMS 甚至犯了严重的错误,自己做了魔术引用(例如:Wordpress)。始终按照我上面的建议进行过滤,关闭魔术引号,你应该没问题。

Do not use stripslashes(). It is utterly useless in terms of security, and there's no added benefit. This practice came from the dark ages of "magic quotes", a thing of the past that has been eliminated in the next PHP version.

Instead, only filter input:

  • string: mysql_real_escape_string($data)
  • integers: (int)$data
  • floats: (float)$data
  • boolean: isset($data) && $data

The output is a different matter. If you are storing HTML, you need to filter HTML against javascript.

Edit: If you have to do stripslashes() for the output to look correctly, than most probably you have magic quotes turned on. Some CMS even made the grave mistake to do their own magic quotes (eg: Wordpress). Always filter as I advised above, turn off magic quotes, and you should be fine.

撑一把青伞 2024-12-07 08:14:07

不要考虑性能,考虑安全。每次将数据插入数据库时​​使用mysql_real_escape_string

Do not think about performance, think about security. Use mysql_real_escape_string everytime you're inserting data into DB

給妳壹絲溫柔 2024-12-07 08:14:07

不,不要逃避它。请改用准备好的语句。以原始格式存储数据,并根据显示需要对其进行处理 - 例如,在显示用户提供的 HTML 时使用合适的方法阻止 Javascript 执行。

请参阅 Bill Karwin 的Sql 注入神话与谬论演讲幻灯片了解更多信息这个话题。

请参阅 HTML Purifierhtmlspecialchars 了解多种过滤 HTML 输出的方法。

No, don't escape it. Use prepared statements instead. Store your data in its raw format, and process it as necessary for display - for example, use a suitable method to prevent Javascript from executing when displaying user supplied HTML.

See Bill Karwin's Sql Injection Myths and Fallacies talk and slides for more information on this subject.

See HTML Purifier and htmlspecialchars for a couple of approaches to filter your HTML for output.

野鹿林 2024-12-07 08:14:07

查看一个可以自动为您执行所有这些操作以及更多操作的数据库抽象库,例如 http://adodb.sourceforge 上的 ADOdb。 net/

它解决了其他人提出的许多问题,例如安全性/参数化。我怀疑节省的任何性能是否值得开发人员在每次查询时手动执行所有这些操作,或者牺牲安全实践。

Check out a database abstraction library that does all this and more for you automatically, such as ADOdb at http://adodb.sourceforge.net/

It addresses a lot of the concerns others have brought up such as security / parameterization. I doubt any performance saved is worth the developer hassle to do all this manually every query, or the security practices sacrificed.

指尖微凉心微凉 2024-12-07 08:14:07

最好始终清除数据中潜在的恶意或被忽视的特殊字符,这些字符可能会引发错误或损坏数据库。

根据 PHP 文档,它甚至说“如果不使用此函数来转义数据,则查询容易受到 SQL 注入攻击。"

It is always best to scrub your data for potential malicious or overlooked special characters which might throw errors or corrupt your database.

Per PHP docs, it even says "If this function is not used to escape data, the query is vulnerable to SQL Injection Attacks."

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文