SQLite и безопасность
Данная проблема недавно затрагивалась в php.internals.
Суть в следующем. SQLite не имеет сервера, посему файлы данных хранятся в доступном апачу фолдере. Часто таковым является document_root, что делает возможным любому скачать файл базы, просто обращаясь по URL http://example.com/database.sqlite (если есть возможность положить базу вне docroot, проблемы нет как таковой). Имея в распоряжении .htaccess, это дело несложно запретить, но не все хостеры позволяют манипулировать .htaccess (и не у всех стоит апач).
Ilia Alshanetsky предложил давать базам расширение .php и первой создавать табличку с именем "<?php" - дабы вызывался парс еррор. Решение прикольное, хотя и является грязным хаком. Расмус, правда, раскритиковал этот подход, с аргументами "какой-нибудь дебил напишет патч или враппер с '<?php `rm -rf *`', а нам потом оправдываться, что предложили подобную фигню"...
Но, тем не менее, подход вполне нормальный, за исключением того, что надо создавать каждый раз эту дурную таблицу. Но можно обойтись и без этого.
В коде библиотеки sqlite (в винде она у меня статически вкомпилена в php5ts.dll) есть строка "** This file contains an SQLite 2.1 database **", которая автоматом пишется в начало каждого SQLite-файла. Вот ее-то можно и заменить на что то вроде "<?php header("HTTP/1.1 404 Not Found");exit;?>" Ну и, конечно же, расширение файлу с базой надо давать ".php".
Единственная возникающая проблема - так патчить надо все либы, которые используют файл - ибо по этой строке и определяется, SQLite-база это или нет. Впрочем, это можно рассматривать и как дополнительную защиту - какой-нибудь sqlite-viewer эту базу не откроет.
Данная проблема недавно затрагивалась в php.internals.
Суть в следующем. SQLite не имеет сервера, посему файлы данных хранятся в доступном апачу фолдере. Часто таковым является document_root, что делает возможным любому скачать файл базы, просто обращаясь по URL http://example.com/database.sqlite (если есть возможность положить базу вне docroot, проблемы нет как таковой). Имея в распоряжении .htaccess, это дело несложно запретить, но не все хостеры позволяют манипулировать .htaccess (и не у всех стоит апач).
Ilia Alshanetsky предложил давать базам расширение .php и первой создавать табличку с именем "<?php" - дабы вызывался парс еррор. Решение прикольное, хотя и является грязным хаком. Расмус, правда, раскритиковал этот подход, с аргументами "какой-нибудь дебил напишет патч или враппер с '<?php `rm -rf *`', а нам потом оправдываться, что предложили подобную фигню"...
Но, тем не менее, подход вполне нормальный, за исключением того, что надо создавать каждый раз эту дурную таблицу. Но можно обойтись и без этого.
В коде библиотеки sqlite (в винде она у меня статически вкомпилена в php5ts.dll) есть строка "** This file contains an SQLite 2.1 database **", которая автоматом пишется в начало каждого SQLite-файла. Вот ее-то можно и заменить на что то вроде "<?php header("HTTP/1.1 404 Not Found");exit;?>" Ну и, конечно же, расширение файлу с базой надо давать ".php".
Единственная возникающая проблема - так патчить надо все либы, которые используют файл - ибо по этой строке и определяется, SQLite-база это или нет. Впрочем, это можно рассматривать и как дополнительную защиту - какой-нибудь sqlite-viewer эту базу не откроет.