0

我有下面的代码,用于登录身份验证部分。都在mysql里,我尽力把它转成odbc

$row = $query->odbc_assoc();我得到一个错误:我猜必须在

$connection = odbc_connect("Driver={SQL Server};Server=$host;Database=$database;",$uid, $passVal ) or die("Connection could not established");

$query = $connection->'SELECT Level_access FROM users WHERE ID = "'.$connection->addslashes($_SESSION['user_id']).'"';
$row = $query->odbc_assoc();

$connection->close();

有人可以检查一下吗,虽然写的可能完全错误..问题:mysql_escape_string 是否等同于odbc 连接中的addlashes?

谢谢

4

1 回答 1

0

问题:mysql_escape_string 是否等同于 odbc 连接中的 addlashes?

不,而且addslashes永远不是正确的工具!通过对字符集的简单操作,绕过addslashes创建的简单转义层非常简单。这仍然让您对SQL 注入敞开大门。此外,mysql_real_escape_string仅适用于 MySQL,并且仅在具有已声明字符集的开放 MySQL 连接下才能正确运行。

这并没有开始触及您的语法完全是虚假的事实。 odbc_connect返回资源,而不是对象。试图在它上面调用一个方法只会杀死脚本。

如果您需要使用 OBDC 连接到 SQL Server 而不是像sqlsrv 扩展这样现代的东西,那么至少使用PDO via PDO_ODBC。这两个选项都为您提供了带有参数化查询的准备好的语句,这通常是对 SQL 注入的有效防御。Sqlsrv 的准备好的语句在服务器上执行,它们应该在哪里,而 PDO 是在内部而不是在服务器上完成的。只要确保在连接字符串中传递连接字符集,并确保您将传递的所有用户数据都在正确的字符集中,就可以了。

于 2012-12-14T04:32:52.980 回答