想想bobby drop table,现在考虑以下内容:
$dbh = new PDO("mysql:host=...;dbname=mysql", ...);
$dbh->query("use newdatabase");
这似乎超级不安全。我为什么要这个?因为我已经构建了自己的数据库连接工具,最后一部分允许您指定要使用的数据库。无论您连接到哪种类型的数据库服务器,我的连接工具都会在一天结束时返回\PDO
对象:pgsql,mysql或sqlite。
这个问题是,如果我创建setDatabase(string $database)
,那么你可能是恶意的。 通过连接字符串然后连接是否适当的方式? 或者有一种安全的方式可以连接,然后设置数据库吗?
答案 0 :(得分:2)
我相信这是安全的。只要没有用户输入被送到setDatabase()
。如果用户输入确实需要传递给setDatabase()
,您可以使用某种形式的可用数据库白名单。
简单地说:它是安全的,因为没有用户输入,也没有注射机会。
答案 1 :(得分:-2)
无论查询是什么以及您是否使用预准备语句,都可以按照以下两个步骤保护脚本免受SQL注入:
<强> 1。始终逃避用户输入
list item
像这样逃避它将保护您免受SQL注入和XSS攻击。
<强> 2。始终用引号
包装值<?php
$user_input = htmlspecialchars($user_input, ENT_QUOTES | ENT_HTML5, "UTF-8", false);
如果您正在使用WHERE并比较整数,则没有义务用引号包装该值,但在这种情况下,有人并且很容易进行SQL注入,SELECT * FROM `table` WHERE `value` = "some value here";
无法保护您。