我有下面的代码,用于登录身份验证部分。这一切都是在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 connection中的加斜杠?
谢谢
发布于 2012-12-14 12:32:53
问题: odbc连接中的mysql_escape_string等同于加斜杠吗?
不,addslashes从来都不是正确的工具!通过对字符集的简单操作,绕过addslashes创建的简单转义层是非常简单的。这仍然会让您对SQL injection敞开大门。此外,mysql_real_escape_string仅适用于MySQL,并且只有在具有已声明字符集的打开MySQL连接时才能正确运行。
这并没有涉及到你的语法完全是假的这一事实。odbc_connect返回的是资源,而不是对象。试图在它上面调用一个方法,除了杀死脚本之外,什么也不会做。
如果您需要使用OBDC来连接到SQL Server,而不是像sqlsrv extension这样的现代工具,那么至少要通过PDO_ODBC使用PDO。这两个选项都为您提供了prepared statements with parameterized queries,这通常是对SQL注入的有效防御。Sqlsrv的预准备语句在服务器上执行,而PDO是在内部执行的,而不是在服务器上执行。只需确保在连接字符串中传递连接字符集,并确保要传递的所有用户数据都使用正确的字符集,就可以了。
https://stackoverflow.com/questions/13859465
复制相似问题