Редактировать файл на SFTP-сервере - PullRequest
2 голосов
/ 17 марта 2011

Я написал скрипт, который принимает пользовательский ввод из текстовой области и помещает его в текстовый файл.Он также проверяет, существует ли фрагмент текста пользователя в текстовом файле, в этом случае он не записывает данные в файл (для предотвращения дублирования записей).В приведенном ниже коде речь идет о файле «textfile.txt».Вместо этого я хочу отредактировать файл на SFTP-сервере.Я прочитал кое-что о ssh2_sftp, но я не понял, как его использовать.Пожалуйста, помогите мне!

Кроме того, существует ли угроза безопасности, позволяющая пользователям редактировать текстовый файл на сервере, используя приведенный ниже код?(кроме спама и файла, который становится невероятно большим, поскольку я использую CAPTCHA для формы ввода).

Спасибо!

<?
$text = $_POST['update'];
$handle = file_get_contents("textfile.txt",NULL); 
$text=str_replace(",","",$text); 
$text=explode(" ",$text); 
$c=0; 
foreach($text as $y){ 
if (stristr($handle,"$text[$c]")) $b[]= 'yes'; 
else $b[]='no'; 
$c++; 
} 
echo $handle; 
if (in_array("no",$b)) /*här */if($_POST['Submit']){
$open = fopen("textfile.txt","a+");
$text = $_POST['update'];
fwrite($open, "".$text."\n");
fclose($open);
echo "<br/><br/><br/>".$text." has been saved."; 
foreach($file as $text) {
echo $text."<br />";
}
}else{    
} 
else echo '<br/><br/>Thats already in there.'; 
?>

Ответы [ 2 ]

1 голос
/ 22 марта 2011

Использование phpseclib, чистой реализации PHP SFTP ...

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

echo $sftp->pwd() . "\r\n";
$sftp->put('textfile.txt', $sftp->get('textfile.txt') . $_POST['update']."\n");
?>
1 голос
/ 17 марта 2011

Да.Если вы не проверяете, как отображается содержимое файла (из того, что я вижу, вы используете echo $handle; для его отображения), тогда человек может отправить специально созданный HTML-код и создать XSS-атаку.

Возможно, вы захотите использовать strip_tags () во входных данных, чтобы предотвратить это.

Кроме того, атака DOS может быть довольно легко запущена из-за использования file_get_contents вфайл неизвестного размера.Это можно уменьшить, просто зацикливая файл за строкой или устанавливая ограничение на длину текста, отправляемого пользователем.Эта атака вряд ли настолько серьезна, потому что вы используете CAPTCHA, что замедлит большинство пользователей от быстрой отправки текста, но если file_get_contents() вызывается без использования CAPTCHA (скажем, для просмотра содержимого файла), то вы все равно будетевозникли проблемы.

Редактировать: Я переписал большую часть вашего кода и добавил множество комментариев.Надеемся, что вы сможете извлечь из него несколько советов и подсказок и лучше понять лучшие практики программирования.(Я не пробовал запускать код, но он должен работать нормально. При необходимости вносите в него изменения.)
http://pastebin.com/W1EQ3fSm

...