このような混乱を避けるために、私は常にsprintf()
文字列を連結する必要がある場所を使用します
変化する:
global $wpdb;
if ( isset ( $_POST['id'] ) && ! empty ( $_POST['id'] )) {
$wpdb->query("DELETE " . PRO_TABLE_PREFIX . "tutorial WHERE id='{$_POST['id']}'");
}
に:
global $wpdb;
if ( isset ( $_POST['id'] ) )) {
$wpdb->query(sprintf("DELETE %stutorial WHERE id='%s'", PRO_TABLE_PREFIX, $_POST['id']));
}
注意すべき点がいくつかあります。
1)SQLインジェクションに対して脆弱です
2)isset()
のキーが$_POST['id']
実際にそうではないかどうかを判断するために使用した後は、そのキーがNULL
空であるかどうかを確認する必要はありません。empty()
アップデート
あなたは本当に$_POST['id']
それが有効かどうかをテストする必要があります。次のような関数を実装することをお勧めします。is_id_valid()
function is_id_valid(&$id){ //<-- IMPORTANT, Argument should be a reference
if ( ! isset($id) ){
return false;
}
if ( empty($id) ){
return false;
}
// add this if you expect $id to be a numeric value
// otherwise just ignore - do not add
if ( ! is_numeric($id) ){
return false;
}
//it's also a good to validate the length
if ( strlen($id) > ... && strlen($id) < ... ){
return false;
}
//seems like all tests passed
return true;
}
次に、次のように使用します
if ( is_id_valid($_POST['id']) !== false ){
....
}
警告:それはまだSQLインジェクションに対して脆弱です