我编写了一个脚本,它从textarea获取用户输入并将其放入文本文件中。它还检查文本文件中是否已存在用户文本,在这种情况下,它不会写入文件(以防止重复条目)。 在下面的代码中,有问题的文件是'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.';
?>
答案 0 :(得分:1)
是。除非您正在清理文件内容的显示方式(从我看到的内容,您使用echo $handle;
来显示它),然后一个人可以提交精心设计的HTML并创建XSS攻击。
您可能需要考虑在输入数据上使用strip_tags()来帮助防止这种情况发生。
此外,由于在未知大小的文件上使用file_get_contents
,因此可以相当容易地启动DOS攻击。这可以通过逐行循环遍历文件或限制用户提交文本的时间来减少。这种攻击可能不是很严重,因为你使用CAPTCHA会降低大多数用户快速提交文本的速度,但是如果在不使用CAPTCHA的情况下调用file_get_contents()
(例如,查看文件的内容)那么你就是'我还有问题。
修改:我为您重写了大部分代码段并添加了大量注释。希望您能从中获取一些提示和技巧,并更好地了解最佳编程实践。 (我没有尝试运行代码,但它应该工作正常。根据需要对其进行修改。)
http://pastebin.com/W1EQ3fSm
答案 1 :(得分:1)
使用phpseclib, a pure PHP SFTP implementation ...
<?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");
?>