我对整个 PHP/MSSQL 编码非常陌生,需要 SQL 注入预防方面的帮助。
我正在向使用 MSSQL 数据库的网站添加一个简单的搜索功能。该代码按照我想要的方式工作,但它很容易受到 SQL 注入的攻击。
除了准备语句之外,还有其他方法可以确保其安全吗?
我对存储过程也不太熟悉。
我尝试过准备语句,但没有运气(除非我做错了什么,这很可能)
我不熟悉的存储过程。
<?PHP
$tech = (isset($_POST['Technician'])? $_POST['Technician'] : null);
$sql = "SELECT * FROM Errors WHERE Error LIKE '%$tech%' or Description LIKE '%$tech%'";
$name = trim($_POST['Technician']);
if(empty($name)){
print '<script type="text/javascript">alert("Please enter an Error Code or Error Description")</script>';
exit;
}
$stmt = sqlsrv_query($conn, $sql);
if ($stmt) {
$rows = sqlsrv_has_rows( $stmt );
if ($rows === true) {
echo "";
} else{
echo '<script type="text/javascript">alert("Please enter a valid Term")</script>';
}
}
while($db_field = sqlsrv_fetch_array($stmt)){
print '<table align="center" style="position: relative; width:250px; text-align: center;">';
print '<tr>';
print '<td><a href="result.php?Error=' . $db_field['Error'] . '">'.$db_field['Error']."</a></td></tr>";
print "<tr>";
print '<td>'.$db_field['Description'].'</td></tr>';
//print "<tr><th>"."Cause"."</th>";
//print "<td>".$db_field['Cause']."</td></tr>";
//print "<tr><th>"."Resolution"."</th>";
//print "<td>".$db_field['Resolution']."</td></tr>";
print "</table><br>";
}
sqlsrv_close($conn);
?>
Run Code Online (Sandbox Code Playgroud)
我预计 SQL 注入在尝试时会失败。
使用参数化查询非常简单,只需注意?:
$sql = "SELECT * FROM Errors WHERE Error LIKE ? OR Description LIKE ?";
Run Code Online (Sandbox Code Playgroud)
然后构建一个添加 LIKE 通配符的参数数组%:
$params = array("%$tech%", "%$tech%");
Run Code Online (Sandbox Code Playgroud)
带参数执行:
$stmt = sqlsrv_query( $conn, $sql, $params);
Run Code Online (Sandbox Code Playgroud)
或者,为了灵活地处理其他查询,对于参数,您可以执行以下操作:
$tech = "%$tech%";
$params = array($tech, $tech);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2579 次 |
| 最近记录: |