php - 在SFTP服务器上编辑文件

标签 php ssh sftp

我编写了一个脚本,该脚本从文本区域获取用户输入并将其放入文本文件中。它还检查用户的文本片段是否已存在于文本文件中,在这种情况下,它不会写入文件(以防止重复条目)。 在我下面的代码中,有问题的文件是“textfile.txt”。我想编辑 SFTP 服务器上的文件,而不是那个。我读过一些有关 ssh2_sftp 的内容,但我不明白如何使用它。请帮助我!

此外,让人们使用下面的代码编辑服务器上的文本文件是否存在安全风险? (除了垃圾邮件和文件变得非常大,因为我在输入表单中使用验证码)。

谢谢!

<?
$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.'; 
?>

最佳答案

是的。除非您正在清理文件内容的显示方式(据我所知,您正在使用 echo $handle; 来显示它),否则人们可以提交精心设计的 HTML 并创建一个XSS 攻击。

您可能需要考虑使用strip_tags()在输入数据上以帮助防止这种情况。

此外,由于对未知大小的文件使用了 file_get_contents,因此可以相当容易地发起 DOS 攻击。通过简单地逐行循环文件或限制用户提交的文本长度可以减少这种情况。这种攻击不太可能那么严重,因为您使用的是验证码,这会减慢大多数用户快速提交文本的速度,但是如果在不使用验证码的情况下调用 file_get_contents() (例如,为了查看文件的内容)那么你仍然会遇到问题。

编辑:我为您重写了大部分代码片段并添加了很多注释。希望您能从中学到一些提示和技巧,并更好地理解最佳编程实践。 (我还没有尝试运行代码,但它应该可以正常工作。根据需要对其进行修改。)
http://pastebin.com/W1EQ3fSm

关于php - 在SFTP服务器上编辑文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5332693/

相关文章:

php - FileInfo 在 php 5.3.3 中不起作用

php - foreach 循环中仅输出一次值

ssh - 无家可归的盒子和iptables

bash - 如何杀死多台计算机上某个用户的所有进程?

java - 在 JSch ChannelSftp 操作上配置超时

groovy - 使用Groovy从远程服务器读取文件

php - Symfony2/ Twig /Bootstrap : How to customize DeleteForm Button

ssh - ansible ssh 权限被拒绝

java - 传入文件的 Apache Mina SFTP 服务器端 channel 监听器

php - 在 PHP 上将多种类型的日期字符串格式化为相同的日期格式