php – 这样安全吗? ADOdb准备好的声明
我正在使用ADOdb连接到我的MSSQL数据库.我想知道这是否足以阻止SQL注入?
我正在使用的准备好的查询是: $db = ADONewConnection('odbc_mssql'); $dsn = "Driver={SQL Server};Server=SERVNAME;Database=DBNAME;"; $ADODB_COUNTRECS = false; $db->Connect($dsn,'LOGIN','PASS'); $sql = 'SELECT login,etc FROM users WHERE login ='.$db->Param('0').' AND pass ='.$db->Param('1').''; $stmt = $db->Prepare($sql); $stmt = $db->Execute($stmt,array("$user_id","$psw")); 或者您可能会建议切换到PDO? 解决方法
我不明白为什么没有人试图回答这个问题,甚至以任何方式发表评论.所以我猜想这会以神秘的方式运作……;)无论如何,我已经研究了足够的(我想是这样的)能够以一定程度的自信来回答这个问题.
因此,本质上准备好的查询比输入转义更安全,例如mysql_real_escape_string();,因为正如一些有智慧的人所说:
链接到完整答案:mysql_real_escape_string 那么我做了什么来测试我准备好的语句vs转义 – 我做了一个简单的提交表单并试图用mysql_real_escape_string()来清理输入;肯定是失败的例子有“1 OR 1 = 1”,有些人建议在单引号中添加转义值,如:
它有助于防止“1 OR 1 = 1”的例子,但肯定这不是最好的做法.转义的问题在于它无法防止人们以恶意方式更改您的查询逻辑. 所以从现在开始,我将坚持ADODB准备好的陈述.就像我上面的原始问题中的那个,或者来自bobby-tables网站的更短版本: $dbConnection = NewADOConnection($connectionString); $sqlResult = $dbConnection->Execute( 'SELECT user_id,first_name,last_name FROM users WHERE username=? AND password=?',array($_POST['username'],sha1($_POST['password']) ); 关于SQL注入的其他非常有用的问题: > Code safe from injections 另外观看这个视频,它使SQL注入更容易掌握: > SQL Injection Myths & Fallacies (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |