如何防止恶意用户通过包含数据库连接脚本非法操作我的MySQL数据库?
关于PHP数据库连接脚本的安全问题解答
首先说你担心的远程包含问题:PHP默认是禁止远程包含外部URL脚本的,php.ini里的
allow_url_include参数默认是Off状态。就算恶意用户在他的服务器写include 'www.anothersite.com/DB/connect.php',PHP也不会执行这个远程请求,根本拿不到你的连接信息。退一万步说,就算有人手贱开了这个参数,你的连接脚本只要是正常写的(只定义变量、执行连接,没有主动输出账号密码),别人通过URL访问这个脚本时,服务器会执行PHP代码,不会把源码里的账号密码暴露出来,远程包含得到的只是脚本执行后的空内容,没用。把文件放到公共域名之外的目录,绝对是靠谱的安全措施!
公共目录(比如网站根目录的public_html、www文件夹)里的文件,理论上可以通过URL直接访问。虽然正常情况下PHP脚本会被服务器解析执行,不会泄露源码,但如果服务器配置出错(比如PHP解析失效,脚本被当成纯文本下载),你的数据库账号密码就直接凉了。放到公共目录外面(比如网站根目录的上级文件夹),通过URL根本访问不到,只能让你自己的PHP脚本通过本地包含调用,安全性直接拉满。再给你补几个额外的安全小细节:
- 给连接脚本设置严格的文件权限,比如只让Web服务器用户有读权限,禁止写权限,防止被恶意篡改。
- 连接数据库失败时,别输出具体的账号密码或错误详情,只给个通用提示就行,避免泄露敏感信息。
- 给数据库账号设置最小权限:比如你的业务只需要查数据,就只给SELECT权限;需要增改的话再加对应权限,别给DROP、ALTER这种高危权限,就算真出问题,损失也能降到最小。
内容的提问来源于stack exchange,提问作者Ben
相关产品推荐
相关产品推荐

