我编写了一个脚本,该脚本从文本区域获取用户输入并将其放入文本文件中。它还检查用户的文本片段是否已存在于文本文件中,在这种情况下,它不会写入文件(以防止重复条目)。 在我下面的代码中,有问题的文件是“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/