报告漏洞的常规位置是 http://bugs.mysql.com/,这是我们漏洞数据库的地址。该数据库是公开的,任何人都可以浏览和搜索。如果您登录系统,您还可以提交新的报告。
如果您在 MySQL Server 中发现敏感的安全漏洞,请立即通过发送电子邮件至 <[email protected]>
通知我们。例外情况:支持客户应将所有问题(包括安全漏洞)报告给 Oracle 支持部门,网址为 http://support.oracle.com/。
编写一份好的漏洞报告需要耐心,但如果第一次就做对了,就能为我们和您节省时间。一份好的漏洞报告,包含一个完整的漏洞测试用例,会极大地提高我们修复问题的可能性,而不是推迟修复时间。
本节将帮助您正确编写报告,这样您就不会浪费时间去做一些对我们没有帮助或帮助很小的事情。
如果您有一个可重复的漏洞报告,请将其报告到漏洞数据库,网址为 http://bugs.mysql.com/。任何我们能够重复的漏洞都很有可能得到较快的修复。
要报告其他问题,您可以使用 MySQL 邮件列表之一。
请记住,我们有可能回复包含太多信息的邮件,但无法回复包含太少信息的邮件。人们经常会省略一些事实,因为他们认为自己知道问题的根源,并且认为某些细节并不重要。
一个好的原则是这样的:如果您对是否陈述某件事有疑问,请陈述它。在您的报告中多写几行比等待更长时间才能得到答案要快且省事,因为如果我们必须要求您提供初始报告中缺少的信息,我们可能需要向您询问这些信息。
漏洞报告中最常见的错误是 (a) 未包含所使用的 Connector/J 或 MySQL 的版本号,以及 (b) 未完全描述 Connector/J 所安装的平台(包括 JVM 版本,以及 MySQL 本身所安装的平台类型和版本号)。
这些都是非常重要的信息,在 100 个漏洞报告中,有 99 个在没有这些信息的情况下是无用的。我们经常会收到类似这样的问题:““为什么这对我来说不起作用?” 然后我们发现,所请求的功能在该 MySQL 版本中未实现,或者报告中描述的漏洞在更新的 MySQL 版本中已经修复。
有时错误是平台相关的;在这种情况下,如果我们不知道操作系统和平台的版本号,就几乎不可能修复任何问题。
如果可能,请创建一个可重复的、独立的测试用例,该用例不涉及任何第三方类。
为了简化此过程,我们为 Connector/J 提供了一个测试用例基类,名为 'com.mysql.cj.jdbc.util.BaseBugReport
'。要使用此类为 Connector/J 创建测试用例,请创建自己的类,该类继承自 com.mysql.cj.jdbc.util.BaseBugReport
并在 setUp()
、tearDown()
和 runTest()
方法中覆盖它们。
在 setUp()
方法中,创建代码来创建您的表,并用任何演示漏洞所需的数据填充它们。
在 runTest()
方法中,创建代码来演示漏洞,使用您在 setUp
方法中创建的表和数据。
在 tearDown()
方法中,删除您在 setUp()
方法中创建的任何表。
在上述三个方法中的任何一个中,使用 getConnection()
方法的变体之一来创建与 MySQL 的 JDBC 连接
getConnection()
- 提供与getUrl()
中指定的 JDBC URL 的连接。如果连接已经存在,则返回该连接,否则创建新的连接。getNewConnection()
- 如果您需要为您的漏洞报告获取新的连接(即,涉及多个连接),请使用此方法。getConnection(String url)
- 使用给定 URL 返回连接。getConnection(String url, Properties props)
- 使用给定 URL 和属性返回连接。
如果您需要使用与 'jdbc:mysql:///test' 不同的 JDBC URL,请覆盖 getUrl()
方法。
使用 assertTrue(boolean expression)
和 assertTrue(String failureMessage, boolean expression)
方法来创建必须在您的测试用例中满足的条件,以演示您期望的行为(与您观察到的行为相反,这正是您可能要提交漏洞报告的原因)。
最后,创建一个 main()
方法,该方法创建一个新的测试用例实例,并调用 run
方法
public static void main(String[] args) throws Exception {
new MyBugReport().run();
}
完成测试用例后,并验证它演示了您要报告的漏洞,请将其与您的漏洞报告一起上传到 http://bugs.mysql.com/。