【问题标题】:Improvement on code [closed]代码改进[关闭]
【发布时间】:2013-05-23 01:30:02
【问题描述】:

好吧,我只是编程的一个小新手,只是为了过去的爱好。我最近只是为了好玩而制作了一个网络编辑器,我被告知这样做的方式(使用 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);
?>

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

【问题讨论】:

标签: php javascript html editor


【解决方案1】:

您不应该使用 GET 请求来存储数据,原因有多种,但最重要的一个原因是:GET 请求的长度是有限制的。

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

您可以做一个隐藏表单,填写您需要的字段并使用 JavaScript 提交。确保设置action="post"

【讨论】:

  • 所以得到一个最大值并且帖子没有限制?好的。隐藏论坛的好主意。
  • POST 请求也有限制,但要大得多,可以通过更改配置值来增加。与其说是逻辑限制,不如说是防洪。
  • 好吧,好吧。但它仍然是传输大量数据的好方法吗?可能高达 1 MB。
  • 是的,发布大数据应该没问题。
  • 你认为它的效率如何?
【解决方案2】:

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

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

【讨论】:

  • 转义并不难。我打算在我开始工作后将其存储在数据库中。但我刚刚被告知我保存它的方式,因为发送数据是一个坏主意。我只是想不出更好的方法。
猜你喜欢
  • 1970-01-01
  • 2017-01-25
  • 2020-10-22
  • 2012-05-20
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-05
  • 2021-05-27
相关资源
最近更新 更多