试用、下载、了解更多产品信息请点击"咨询在线客服"















| 功能 | 要求 |
| 主要功能 | Microsoft Windows 95或更新版本 至少50 MB可用磁盘空间 128 MB内存或更多(更大的内存能提高性能) SVGA显卡或更好 |
流行的数据库管理系统(DBMS)Oracle MySQL 中发现了被称为“The Riddle”的编码漏洞,该漏洞允许攻击者利用MiTM(man-in-the-middle,中间人)来窃取用户的用户名和密码等登录凭证。用户请立即更新到5.7版本。
MiTM 攻击(Man-in-the-MiddleAttack)是一种“间接”的入侵攻击,这种攻击模式是通过各种技术手段将受入侵者控制的一台计算机虚拟放置在网络连接中的两台通信计算机之间,这台计算机就称为“中间人”。例如SMB会话劫持、DNS欺骗等攻击都是典型的MITM攻击。
Riddle漏洞是Oracle MySQL 5.5和5.6客户端数据库中发现的关键安全漏洞。该漏洞允许攻击者使用‘中间人攻击’来破坏MySQL客户端和服务器之间的SSL配置连接。这个漏洞是一个非常关键的安全漏洞,因为它影响到MySQL(一个非常流行的SQL数据库,SSL连接由其定义安全。)
该漏洞编号为“CVE-2017-3305”,可以潜在地将用户登录凭证暴露给攻击者,当MySQL客户端5.5和5.6将这些用户凭证信息发送到服务器时,攻击者就能够顺利捕获它们。
针对5.5.49和5.6.30版本发布的安全更新无法完全解决这一安全漏洞。5.7及更高版本以及MariaDB系统不受该安全问题的影响。

根据安全研究人员 Pali Rohár 所言,他们曾经尝试利用影响MySQL数据库的BACKRONYM漏洞的修补方式来修复Riddle漏洞,但是结果失败了。Backronym漏洞也同Riddle漏洞一样,允许攻击者运行中间人攻击来窃取用户登录凭证,即使流量已经被加密也无法阻止。
MySQL 5.5.49以及5.6.30 稳定版的安全更新包括在验证过程完成后添加安全参数的验证。因为验证完成后,攻击者可以使用中间人攻击与 SSL 降级攻击来窃取用户的登录数据,以便立即进行身份验证并登录 MySQL 服务器,可笑的部分是,MySQL 客户端不会在MySQL服务器拒绝验证用户时报告任何与 SSL 问题相关的错误,而是报告服务器发送的未加密的错误信息。此外,当中间人攻击处于活跃状态时,错误信息可以由攻击者控制。
安全专家建议用户尽快将客户端软件更新到MySQL 5.7 或 MariaDB,因为这些应用程序的安全更新正在正常运行,未受该安全漏洞影响。需要注意的是,这个漏洞虽然早在今年2月份就已经发现了,但是目前仍然在影响Oracle MySql软件。
如果你不是Oracle 用户,那么你对他们报告安全漏洞是无用的(即使确实是与安全相关的漏洞)。他们可以完全无视这些安全报告,甚至希望任何人都不要知道这些报告和漏洞的存在,所以至此他们都没有对漏洞进行修复。所以,立即向用户公开披露这些安全漏洞看来是最有效的解决方案,因为这样可以让用户知道一旦受影响应该做什么,有效的保护用户数据安全。
试用、下载、了解更多产品信息请点击"咨询在线客服"
using System.Windows.Forms; using Leadtools; using Leadtools.Codecs; using Leadtools.WinForms; using Leadtools.Annotations;
RasterImageViewer viewer = new RasterImageViewer();
RasterImage img;
AnnAutomationManager annger;
AnnAutomation automation;private void initControl() {
Support.SetLicense();
viewer.Dock = DockStyle.Fill;
panel1.Controls.Add(viewer);
viewer.HorizontalAlignMode = RasterPaintAlignMode.Center;
viewer.VerticalAlignMode = RasterPaintAlignMode.Center;
loadImage("qwe.jpg");
if (viewer.Image != null)
{
// create and setup the automation manager
annger = new AnnAutomationManager();
// Instruct the manager to create the default (all) automation objects.
annger.CreateDefaultObjects();
// create the toolbar and add it to the form
annger.CreateToolBar();
Controls.Add(annger.ToolBar);
// setup the automation (will create the container as well)
automation = new AnnAutomation(annger, viewer);
// add an event handler for changes to the current designer
automation.CurrentDesignerChanged += new EventHandler(automation_CurrentDesignerChanged);
// setup this automation as the active one
automation.Active = true;
}
toolStripComboBox1.SelectedIndex = 0;
}
private void loadImage(string filename)
{
img = new RasterCodecs().Load(filename);
viewer.Image = img;
}
private void automation_CurrentDesignerChanged(object sender, EventArgs e)
{
AnnAutomation automation = sender as AnnAutomation;
AnnButtonRunDesigner buttonRunDesigner = automation.CurrentDesigner as AnnButtonRunDesigner;
if (buttonRunDesigner != null)
buttonRunDesigner.Run += new EventHandler(buttonRunDesigner_Run);
}private void buttonRunDesigner_Run(object sender, AnnRunDesignerEventArgs e)
{
if (e.OperationStatus == AnnDesignerOperationStatus.End)
{
AnnButtonObject btn = e.Object as AnnButtonObject;
MessageBox.Show(string.Format("Button with text = {0} was clicked!", btn.Text));
}
}
private void loadImage(string filename)
{
img = new RasterCodecs().Load(filename);
viewer.Image = img;
}
private void toolStripComboBox1_SelectedIndexChanged(object sender, EventArgs e)
{
annger.UserMode = (toolStripComboBox1.SelectedIndex == 0) ? AnnUserMode.Design : AnnUserMode.Run;
}
