改进代码

时间:2013-05-23 01:30:02

标签: php javascript html editor

好吧,我只是一个编程新手,只是为了过去的爱好而做的。我最近刚刚制作一个网页编辑器以获得乐趣和我这样做的方式(使用PHP)我被告知这将是一个糟糕的方式。我在制作它的同时也考虑过它,并且在大量的数据传输中,这样做是不错的主意。事情是我想不出另一种方法去做,并且正在寻找帮助我改进它的人,我的意思是我正在使用的保存方法。这是我的代码:

编辑:

<html>
<head>
<title>Web Editor</title>
<link href="controller.css" rel="stylesheet"/>
<script type="text/javascript" src="script/editor.js"></script>
</head>
<body>
<div class="platform">
<div class="head"><div class="file"><p>File: <div id="file">C:\hello.html</div></p></div></div>
<div class="hotbar"><img src="images/save.png" class="hotbarImage" onClick="save()" />

</div>
<div class="editor"><div contenteditable="true" style="height:100%; overflow:scroll;" id="editPad"></div></div>
</div>




</body>
</html>

JS:

function save() {
    var dir = document.getElementById("file").innerHTML;
    var data = document.getElementById("editPad").innerHTML;
    window.location = "save.php?dir="+encodeURIComponent(dir)+"&data="+encodeURIComponent(data);
}

PHP:

<?php
$dir = $_GET['dir'];
$data = $_GET['data'];
$lookFor = array("&lt;", "&gt;","<br>","<%2Fdiv>","<div>","</div>");
$replaceWith = array("<", ">", "", "", "","");
$newData = str_replace($lookFor,$replaceWith,$data);

$f = fopen(urldecode($dir),"w");
fwrite($f,urldecode($newData));
fclose($f);
?>

所有这些只是一项正在进行的工作,需要做更多的工作。但就目前而言,是否有更好的方法来保存文件,并传输大量数据。

2 个答案:

答案 0 :(得分:2)

由于多种原因,您不应使用GET请求来存储数据,但最重要的一个原因是:GET请求限制了它们的持续时间。

如果您的内容非常大,可能就是您无法保存,因为您的浏览器不会发送该URL或服务器不会接受它(因为它太长了)。

您可以做的是制作隐藏的表单,填写您需要的字段并使用JavaScript提交。请务必设置action="post"

答案 1 :(得分:1)

您有一些主要的安全漏洞。最重要的是fopen电话。我可以将任何文件传递到$dir,包括/var/www/file.php,并将任何数据写入其中。这很容易被利用,有人可能会破坏整个Web应用程序,因为他们可以编写新的PHP文件并读/写您的文件系统。

不要将任意文件写入您的文件系统。您应该将它们存储在数据库中。修复代码的这一部分后,您需要处理正确转义HTML的问题。