如果插入用户输入而不修改SQL查询,则应用程序容易受到SQL注入的攻击,如下例所示:
$unsafe_variable = $_POST['user_input'];
mysql_query("INSERT INTO `table` (`column`) VALUES ('$unsafe_variable')");
Run Code Online (Sandbox Code Playgroud)
这是因为用户可以输入类似的内容value'); DROP TABLE table;--,查询变为:
INSERT INTO `table` (`column`) VALUES('value'); DROP TABLE table;--')
Run Code Online (Sandbox Code Playgroud)
可以采取哪些措施来防止这种情况发生?
我知道之前已经问过这个问题,但似乎解决方案已经针对所提出的问题.
我有一个包含数百个实例的代码库,其中使用了mssql_num_rows.
代码示例:
$db->execute($sql);
if ($db->getRowsAffected() > 0) {
$total = $db->fetch();
Run Code Online (Sandbox Code Playgroud)
在db类中:
$this->rowsaffected = mssql_num_rows($this->query_result);
Run Code Online (Sandbox Code Playgroud)
SELECT count(*) FROM table查询,因为我有太多特定的select语句.preg_replace删除之间的所有内容SELECT and FROM,然后用a替换COUNT(*)并运行第二个查询,但这假设所有查询都以某种方式设置.fetchAll先count()得到结果,但这意味着要升级if语句的所有实例.那么如果人们将他们的代码更新为PDO,那么替换为*_num_rows函数的最佳方法是什么呢?不是解决特定问题的东西,而是取代*_num_rows功能的东西.如果那是不可能的,那之前是什么让它成为可能呢?