php - 保护动态 where 子句 (PDO)
问题描述
在我的表单中,我有一个选择和一个输入,如下所示:
<div class="row">
<div class="col-md-4">
<select id="select-column" name="column" class="form-control">
<option value="bin_id">Bin ID</option>
<option value="table_col_one">Column One</option>
<option value="table_col_two">Column Two</option>
<option value="table_col_three">Column Three</option>
</select>
</div>
<div class="col-md-8">
<div>
<input id="search" name="term" type="text" class="form-control">
</div>
</div>
</div>
用户选择要搜索的列,这是我的 SQL 查询:
$term = $_POST['term'];
$column = $_POST['column'];
$sql = "SELECT $column FROM packing_master WHERE $column LIKE :term AND invoice != '' group by $column LIMIT 35";
$stmt = $bdd->prepare($sql);
$stmt->bindParam(':term', $term);
$stmt->execute();
但是如何保证请求的安全?因为它容易受到sql注入?
解决方案
white list
与允许的列名称一起使用:
$term = $_POST['term'];
$column = $_POST['column'];
$allowed_columns = ['col1', 'col2', 'col3'];
// or query a database to get columns in the table you're operating on
if (!in_array($column, $allowed_columns)) {
// throw exception or do anything else that prevents further query execution
}
推荐阅读
- flutter - 如何将变量作为参数传递给小部件二,在那里对其进行修改,并将修改后的值返回给小部件一,Flutter
- python - Pandas:查找excel表中是否存在列名?
- angular - 等待数据恢复结束后再阅读更多
- sql - 如何使用窗口函数计算当前周/当年与同一周数/去年的指标?
- google-chrome - Chrome.identity.launchWebAuthFlow 可能与 gapi 存在 CORS 问题(谷歌登录)
- reactjs - 添加去抖动后数据已停止返回
- python - 802.11无线管理下如何使用scapy组成标签参数,使标签参数在wireshark中可见
- c++ - 如何在 Google 测试中使用 EXPECT_CALL 为模块相关函数编写测试用例?
- google-cloud-platform - GKE Autopilot 未连接到 Cloud Filestore
- python - 如何根据字典中其他键的值删除键值对?