Javascript SQL 攻击:有人在 MySQL 中插入了一个脚本,阻止我删除他们的行。我在这里有啥风险? [关闭]

Posted

技术标签:

【中文标题】Javascript SQL 攻击:有人在 MySQL 中插入了一个脚本,阻止我删除他们的行。我在这里有啥风险? [关闭]【英文标题】:Javascript SQL Attack: Someone inserted a script into MySQL that prevented me from deleting their row. What am I at risk for here? [closed]Javascript SQL 攻击:有人在 MySQL 中插入了一个脚本,阻止我删除他们的行。我在这里有什么风险? [关闭] 【发布时间】:2013-05-11 07:21:44 【问题描述】:

一个用户插入了一个 <script src=...> </script>

我的数据库中的代码,并且使用 phpmyadmin,我无法删除该行。每次我尝试时页面都会不断刷新,并且该行仍然存在。

幸运的是,我在 chrome 中使用了一个隐身窗口,发现通过刷新会话并直接删除该行(无需先查看它),我能够将其删除。我更改了我的数据库密码并清理了我的代码以防止 html 输入——这里还有什么风险?

phpMyadmin 对注入的 javascript 代码有那么敏感吗?

澄清:Phpmyadmin 是我在这个隐身窗口中访问的唯一网站,所以它不可能来自其他网站

【问题讨论】:

你是认真的吗?我对我的 dbs 进行各种 XSS 攻击,而 phpmyadmin 从未解释过任何一行 HTML。在所有字段上执行htmlspecialchars() 是预期行为,我相信即使是旧版本的 phpmyadmin 也不会失败。 嗨 Fabricio,在隐身窗口中,我没有访问任何其他页面。我直接去了phpmyadmin。那么这怎么可能呢? 问题不在于 phpMyAdmin,而是您的 Web 应用程序在呈现来自数据库的用户输入时未正确转义 HTML。 您可能有连接问题或某些会话问题导致页面刷新。您确定它被解释为脚本吗?不就是屏幕上的文字吗? 检查您的 phpmyadmin 版本是否为最新版本。网络搜索显示旧版本中的 XSS。 【参考方案1】:

没有 phpmyadmin 没有风险(当然,如果您输入了密码并以 root 身份使用其他登录名!)。所有风险都来自您的其他网页,数据可能会插入到您的数据库中。

Go to this section on OWASP 和 here。

【讨论】:

这与问题的描述相矛盾。 在隐身窗口中,这是我访问的唯一页面。这怎么可能? 与浏览器的查看模式无关。我认为是您的数据库中的数据已损坏。 所以我的数据库中的数据可能已损坏,因此我无法删除该行?这怎么可能? 不,您可以删除损坏的行,但我的意思是您的首页可能有一个漏洞,允许在您的数据库中添加错误代码。【参考方案2】:

您的代码以原始方式接受输入。请在插入数据库时​​使用 htmlspecialchars 和编码。

【讨论】:

这与问题的描述相矛盾。如果 使用 htmlspecialchars 来抑制这种类型的攻击 不,不是在插入数据库时​​,而是在输出时。【参考方案3】:

一个简单的解决方案:这称为 XSS 攻击:

当您通过 php 将数据插入 mysql 数据库时,请使用 strip_tags(mysql_real_escape_string())。

【讨论】:

SQL注入与XSS无关。并且不要在输出上使用strip_tags,而是htmlspecialchars 我知道,你必须使用 strip_tags 来避免 xss 攻击!! 使用 PDO 而不是已弃用的 mysql_ 函数,因为它们鼓励安全错误。 是的,PDO 很好,使用过滤器也可以使其防弹。【参考方案4】:

在输出用户提交的数据时,您应始终确保已对其进行了适当的清理。否则,您将面临XSS 攻击的可能性。使用 htmlspecialchars 功能可以轻松清理输出:

echo htmlspecialchars($userSubmittedData, ENT_QUOTES, 'utf-8');

另外,我建议不要在输入时剥离标签等,因为这可能会导致数据完整性丢失。只需确保在输出用户提交的数据时使用htmlspecialchars。

【讨论】:

嗨,Wayne,再次 - 问题完全出在 phpmyadmin 上。我已经对输出的数据进行了清洗,现在对输入的数据也进行了更严格的清洗。 小心不要过于严格地清理输入,因为您可能会无意中删除重要数据。【参考方案5】:

主要问题是有人能够注入恶意代码。在将所有用户输入(包括 url 中的查询字符串)添加到数据库之前,您需要确保所有用户输入(包括 url 中的查询字符串)都已正确清理(在服务器上,而不仅仅是通过 javascript)。对于任何允许文本的字段,您应该搜索可疑字符串,例如 <script 等。更好的(只要它不会破坏您网站的功能)是有一个允许字符的白名单,这样就不可能输入恶意代码。例如,只允许字母数字字符,没有其他的。

【讨论】:

谢谢!如前所述,我已经阻止了以后的 HTML 输入。【参考方案6】:

旧版本(

您可以在这里获取最新版本:http://www.phpmyadmin.net/‎

还看看如何防止 XSS(跨站点脚本) http://www.ibm.com/developerworks/web/library/wa-secxss/ 或者如果您发现链接难以理解,您可以使用 Google 搜索。希望对你有帮助

【讨论】:

【参考方案7】:

检查您的 phpmyadmin 版本是否为最新版本。网络搜索显示旧版本的 XSS。

我找到了这些标题:

PhpMyAdmin 3.5.7 版易受跨站脚本攻击

完全披露:phpMyAdmin 3.3.5 / 2.11.10

您可以在以下位置浏览 phpmyadmin 安全修复历史记录: http://www.phpmyadmin.net/home_page/security/

【讨论】:

以上是关于Javascript SQL 攻击:有人在 MySQL 中插入了一个脚本,阻止我删除他们的行。我在这里有啥风险? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

sql fix_access_denied_for_user_in_mysql.sql

SQL 注入后清理的最佳方法是啥?

SQL 注入后清理的最佳方法是啥?

XXS和SQL注入的预防

JSF中的CSRF、XSS和SQL注入攻击防范

XSS 和 CSRF 两种跨站攻击