extract tek başına güvenlik sorunu yapar diye bişey yoktur. extract tan geçirdikten sonra değişkenleri bir de güvenlik fonksiyonlarından geçirirseniz sorun kalmaz.

ya da şoyle bir fonksiyon kullanabilirsin

<?php
function mysql_extract($Array){
  if(is_array($Array)){
  foreach ($Array as $varName=>$varVal){
 $$varName=mysql_real_escape_string($varVal);
}
}
}
?>
extract yerine bu mysql_extract kullanırsın ancak bu sadece sql güvenliğini sağlar bir sürü yere mudahale edilebilir bununla o kontrolleri de bu fonksiyona eklerseniz güvenli bir extract fonksiyonunuz olur