javascript - CRUD操作的不同方法有什么好处?
问题描述
在执行 CRUD 操作时,我们可以form
如下执行:
<form action="/todo/<%= todos[i]._id %>?_method=DELETE" method="POST">
<button>x</button>
</form>
控制器如下:
app.delete('/todo/:id', (req, res) => {
Todo.findByIdAndDelete(req.params.id, (err) => {
if(err) {
console.log(err);
} else {
res.redirect('/todo');
}
});
});
或者我们可以使用 jQuery 执行它,如下所示:
$(document).ready(function(){
$('form').on('submit', function(){
var item = $('form input');
var todo = {item: item.val()};
$.ajax({
type: 'POST',
url: '/todo',
data: todo,
success: function(data){
//do something with the data via front-end framework
location.reload();
}
});
return false;
});
});
这两种方法有什么区别?(忽略一个是执行“删除”,另一个是“发布”)有人说后者比前者更安全,但找不到任何有关它的文献。
解决方案
以下链接是该人简要提到这一点的地方[关于 ajax 请求更安全],尽管他没有提供任何解释 youtu.be/aZ16pkrMkZE?t=875
他在谈论完全不同的事情。通过 ajax 执行 DELETE 请求并通过单击简单链接删除应用程序中的对象(这将导致 GET 请求)。
后者不仅违反约定(GET 请求不应更改数据),而且……不是不安全,而是“危险”。想象一下,谷歌爬虫访问您的网站并跟踪每个链接。噗,你所有可删除的对象都不见了。
在某些情况下,它也可能不安全。想象一下,为了创建/更新/删除对象,您需要以某种方式对用户进行身份验证。说,使用身份验证令牌。由于它是普通链接和 GET 请求,因此令牌必须转到查询字符串。这样,它就会公开给每个人看到,缓存在每个缓存代理中,并永久存储在流量日志中。不是很安全。
推荐阅读
- algorithm - 是否有一种算法可以在看似随机的字符串列表中找到模式?
- reactjs - 如何使用 React Js 实现表单操作?
- excel - 另存为 PDF,用户可以更改默认文件名
- r - 在shinyapps上部署应用程序时目录问题
- python - 检查两个不同大小的熊猫数据框中两列的条件
- postgresql - postgreSQL 已关闭,但 pg_checksums 仍然说必须关闭集群
- ms-word - 如何在 MS Word 参考书目中显示 ISBN
- c# - Quartz C# 不同的类
- sql-server - Entity Framework 5 或 6 是否支持 SQL Server 同义词?
- linux - Git pathspecs linux(wsl)和windows之间的行为差异