그래서 MySQLi 확장을 지원하기 시작했습니다. 장래에 MySQLi 확장이 지원 될 것이라고 들었습니다. 사용하는 대신 그것에 대해 읽었습니다. mysql_real_escape_string()
prepare()
을 사용해야합니다. 예를 들어, 쿼리에서 $ _GET 또는 $ _POST를 사용할 때입니다.MySQLi 준비는 보안상의 이유로 이루어집니다?
사실입니까? 나는 prepare()가 매개 변수를 변경할 수있는 SQL 쿼리 템플릿을 만드는 데 좋다는 것을 알았다. 따라서 스크립트는 SQL 수준에서도 동적 일 수 있습니다. 정말 유용합니다. 그러나 나는 보안 조치에 대한 실질적인 정보를 찾을 수 없다. 그것은 정말로 악한 것들을 피하고 주사로부터 보호합니까? 아니면 프로그래밍 수준에서 처리해야합니까?
예를 들어,이 코드는 안전합니까? 알 수 있듯이 $_GET
을 사용하여 템플릿을 작성하면 MySQLi 준비가 제대로 작동하지 않는다면 정말 위험 할 수 있습니다. 그들은 SQL 구문 분석 후 서버에 제공받을 때문에
$stmt = $mysqli->prepare('SELECT description,title FROM menu WHERE name = ?');
$stmt->bind_param('s', $n);
$n = $_GET['b'];
$stmt->bind_result($meta_description,$meta_title);
$stmt->execute();
클라이언트와 서버에 대한 작업이 줄어들고 데이터를 이스케이프 및 이스케이프 처리하는 데 시간을 소비 할 필요가 없기 때문에 일반적으로 빠른 코드에서 자리 표시 자 결과가있는 준비된 문을 사용하여 추가하고 싶습니다. 또한 서버는 준비 될 때만 SQL 문을 구문 분석합니다. 여러 쿼리에 사용하면 그 이후에 더 빠릅니다. – snap
빠른 답변 주셔서 감사합니다! :) –