나는 mysqli_stmt_bind_param 함수를 여러 번 사용했다. 그러나 SQL 삽입을 방지하기 위해 노력하고있는 변수를 분리하면 오류가 발생합니다.준비된 명령문에서 테이블 이름을 매개 변수화 할 수 있습니까?
여기에 몇 가지 코드 예제는 다음과 같습니다
function insertRow($db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol)
{
$statement = $mysqli->prepare("INSERT INTO " .$new_table . " VALUES (?,?,?,?,?,?,?);");
mysqli_stmt_bind_param($statment, 'sssisss', $Partner, $Merchant, $ips, $score, $category, $overall, $protocol);
$statement->execute();
}
어떻게 든 다른 바인드 매개 변수 성명을 발표, 또 다른 물음표 문으로 .$new_table.
연결을 교체하거나 SQL 주입을 방지하기 위해 기존에 추가 할 수 있습니까? 귀하의 질문에
function insertRow($db, $mysqli, $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol)
{
$statement = $mysqli->prepare("INSERT INTO (?) VALUES (?,?,?,?,?,?,?);");
mysqli_stmt_bind_param($statment, 'ssssisss', $new_table, $Partner, $Merchant, $ips, $score, $category, $overall, $protocol);
$statement->execute();
}
아니요, 매개 변수가있는 쿼리는 매개 변수 값을 쿼리 문자열로 삭제하는 것이 아니라 RDBMS에 매개 변수가있는 쿼리와 매개 변수를 별도로 제공합니다. 그러나 이러한 쿼리는 테이블 이름이나 필드 이름을 매개 변수로 가질 수 없습니다. 이를 수행하는 유일한 방법은 이미 수행 한 것처럼 쿼리 문자열에 테이블 이름을 동적으로 코딩하는 것입니다. 이 문자열이 잠재적으로 공격에 노출되어 있으면 먼저 유효성을 검사해야합니다. 허용되는 테이블의 화이트리스트리스트와 대조. – MatBailie
mysqli 확장의 사용은 안전합니다, 계속하십시오! 그러나 모든 문자열을 살균하고 유효성을 검사하는 것을 잊지 마십시오. 테이블 또는 필드 이름 또는 데이터베이스와 상충되는 것이 있다면! – B4NZ41
위생 처리에 사용하고자하는 특정 기능이 있습니까? – GK1667