如果文件已经存在,则使 sqlite3_open() 失败
Making sqlite3_open() fail if the file already exists
我正在开发一个使用 SQLite 作为其数据文件的应用程序。我只是在SQLite合并源中链接,直接使用它。
如果用户选择创建一个新文件,我会检查该文件是否已经存在,询问用户是否要覆盖该文件,如果他们说是,则将其删除。然后我调用 sqlite3_open_v2()
并将标志设置为 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
以创建并打开新数据文件。
这很好,除了,如果恶意用户在文件被删除和 SQLite 打开它之间重新创建了我试图打开的文件,会发生什么情况?据我所知,SQLite 只会打开现有文件。
我的程序不涉及密码或任何类型的安全功能。这是一个非常简单的应用程序,所有的事情都考虑到了。但是,我读过很多故事,其中有人使用一个带有隐蔽错误的简单应用程序来绕过某些系统的安全性。
所以,最重要的是,如果文件已经存在,有没有办法让 sqlite3_open()
失败?
您可以打补丁以支持 open(2) 的 O_EXCL 选项标志。如果您在支持该平台的平台上使用 SQLite。
我正在开发一个使用 SQLite 作为其数据文件的应用程序。我只是在SQLite合并源中链接,直接使用它。
如果用户选择创建一个新文件,我会检查该文件是否已经存在,询问用户是否要覆盖该文件,如果他们说是,则将其删除。然后我调用 sqlite3_open_v2()
并将标志设置为 SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE
以创建并打开新数据文件。
这很好,除了,如果恶意用户在文件被删除和 SQLite 打开它之间重新创建了我试图打开的文件,会发生什么情况?据我所知,SQLite 只会打开现有文件。
我的程序不涉及密码或任何类型的安全功能。这是一个非常简单的应用程序,所有的事情都考虑到了。但是,我读过很多故事,其中有人使用一个带有隐蔽错误的简单应用程序来绕过某些系统的安全性。
所以,最重要的是,如果文件已经存在,有没有办法让 sqlite3_open()
失败?
您可以打补丁以支持 open(2) 的 O_EXCL 选项标志。如果您在支持该平台的平台上使用 SQLite。