2013-03-05 2 views
0

Я следующий сценарий, который принимает некоторое значение из формы и добавляет к тексту файл каждый раз, когда новые значения вводятся в виде:Append в PHP файл, а не текстовый файл

$filename = "nic.txt"; #Must CHMOD to 666, set folder to 777 
$text = "\n" . str_pad($fname, 30) . "" . str_pad($lname, 30) . "" . str_pad($tdate, 20) . "" . str_pad($ydept, 30) . "" . str_pad($percentage, 0) . "%"; 

$fp = fopen ($filename, "a"); # a = append to the file. w = write to the file (create new if doesn't exist) 
if ($fp) { 
    fwrite ($fp, $text); 
    fclose ($fp); 
    #echo ("File written"); 
} 
else { 
    #echo ("File was not written"); 
} 

Этот вопрос , вместо того, чтобы записывать в txt-файл, который не защищен при хранении данных, как я могу сказать, присоединяюсь к файлу php, чтобы пользователю потребовалась аутентификация перед просмотром файла в Интернете? Я бы хотел, чтобы какая-то аутентификация (пароль/имя пользователя) на месте, чтобы не все могли ее видеть. И с txt-файлом я не думаю, что это возможно.

My SQL запись в файл данные, который я заметил, пока я не найти лучший вариант:

// Write to DB 
//$conn = new mysqli('host', 'user', 'pass', 'db'); 

// check connection 
//if (mysqli_connect_errno()) { 
// exit('Connect failed: '. mysqli_connect_error()); 
//} 

// store the values in an Array, escaping special characters for use in the SQL statement 
//$adds['fname'] = $conn->real_escape_string($fname); 
//$adds['lname'] = $conn->real_escape_string($lname); 
//$adds['tdate'] = $conn->real_escape_string($tdate); 
//$adds['ydept'] = $conn->real_escape_string($ydept); 
//$adds['percentage'] = $conn->real_escape_string($percentage); 

// sql query for INSERT INTO users 
//$sql = "INSERT INTO keepScore ('fname', 'lname', 'tdate', 'ydept', 'percentage') VALUES ('". $adds['fname']. "', '". $adds['lname']. "', '". $adds['tdate']. "', '". $adds['ydept']. "', '". $adds['percentage']. "')"; 

// Performs the $sql query on the server to insert the values 
//if ($conn->query($sql) === TRUE) { 
// echo 'users entry saved successfully'; 
//} 
//else { 
// echo 'Error: '. $conn->error; 
//} 

//$conn->close(); 
+6

Очень плохая идея, так как введенные данные будут выполняться как PHP-код. Любой может представить PHP-код и компрометировать сервер. –

+0

Спасибо за головы Cryptic, и я сделал эту ошибку раньше, но я использую: «$ fname = trim (strip_tags (stripslashes ($ _ POST ['fName'])));" для дезинфекции ценности. Будет ли это еще проблемой? – Si8

+0

Да, все равно, представьте, что пользователь отправляет этот '' И закрывает команду PHP, тогда доступ к файлу будет пытаться удалить весь корень сервера. Самый безопасный вариант - сохранить его как .txt и сохранить его за пределами webroot для обслуживания через PHP-файл с аутентификацией. –

ответ

4

PHP файлов являются текстовыми файлами. Чтобы достичь того, о чем вы просите, просто сделайте $filename end в .php (удостоверяясь, что данные, которые люди добавляют, это всего лишь данные и не исполняемый код).

... но программный код редактирования не является отличной идеей. Храните ваши данные где-то вне веб-корня (возможно, в файле, но база данных, вероятно, лучше), а затем ваш скрипт извлекает его, когда передается auth/authz).

+0

Вещь с базой данных, я создал ее, и я все еще новичок в ней. Сначала я искал простой метод, а затем перешел к методу базы данных. – Si8

+0

Использование текстового файла вместо базы данных не является простым методом, это заставляет вас изобретать множество вещей, которые база данных предоставит вам бесплатно (например, блокировка файлов). – Quentin

+0

Ну прямо сейчас сценарий, который я написал, делает именно это, записывая текстовый файл. И поскольку к нему не привязана ни одна ссылка, повседневный пользователь не может ее получить, но в случае, если это произойдет, я бы хотел защитить его паролем. Но, допустим, я могу хранить его в базе данных, но тогда мне придется иметь дело с SQL-инъекцией. – Si8

6

Сохраните текстовый файл из корневого каталога веб-сервера и используйте скрипт PHP для обеспечения аутентификации/авторизации при чтении файла.

Посмотрите на readfile().

-1

Вы можете сохранить файлы с расширением .php и добавить информацию заголовка, чтобы служить им как обычный текст вместо html. Затем вы можете вставить php-код в начале, который заставит пользователя пройти аутентификацию.

+0

Это кошмар безопасности. – Brad

+0

Как это мешает пользователям отправлять вредоносный код PHP? –

+0

@cryptic ツ Он упомянул что-нибудь о том, чтобы позволить пользователю отправить информацию в файл, который будет написан? – kingdomcreation

1

Простым решением было бы создать в нем каталог с файлом .txt, который является защищенным .htpasswd. Таким образом, пользователь должен пройти аутентификацию для просмотра содержимого, и вы не подвергаете себя риску за неисчислимое количество уязвимостей безопасности.

+0

Майк, это хорошая идея, но любая идея, как вообще это делать? Спасибо – Si8

+1

Вот ссылка, которая даст вам базовый обзор: http://www.javascriptkit.com/howto/htaccess3.shtml –

+0

Я ищу опцию htpasswd, читая ее. благодаря – Si8

Смежные вопросы