Proste. Po prostu nie dawaj do ściągnięcia bezpośrednio plików tylko przez skrypt "bramkę".
Na przykład
http://domena.pl/getFile.php?fileId=123345A w pliku coś w tym stylu:
<?php
// ... tu robisz co tam chcesz, sprawdzasz IP i takie tam.
// wysyłasz nagłówek że będzie szedł PDF
header('Content-type: application/pdf');
// tu podajesz nazwę pliku, którą zobaczy użytkownik
header('Content-Disposition: attachment; filename="nazwa_pliku.pdf"');
// a u podajesz ścieżkę do pliku, którą określisz na podstawie identyfikatora pliku, który przyszedł z żądaniem.
readfile('plik/w/ukrytj/lokalizacji/original.pdf');
?>
Acha, i AJAX do tego CI nie potrzebny.