在express.js中创建一个安全的POST链接
Create a secure POST link in express.js
我想知道是否有任何简单的方法可以通过使用Express.js技术或插件创建一个链接来向服务器提交POST请求。
这也是一种确保更关键操作(如删除用户)安全的方法。还增加了CSRF保护。
这在一些PHP框架中非常简单,比如CakePHP(及其postLink助手)。
我现在的做法是自己创建一个隐藏的表单,并在html链接中添加一个提交表单的事件:
<form action="/users/delete/{{user.id}}" method="post" name="deleteUser{{ user.id }}" style="display:none;">
<input type="hidden" name="_csrf" value="{{ csrfToken }}" />
</form>
<a href="#" onclick="if (confirm('Are you sure you want to delete this user?')) { document.deleteUser{{ user.id }}.submit(); } event.returnValue = false; return false;">
Delete
</a>
这正是它在CakePHP框架中的工作方式。
为了创建POST请求的链接,您可以使用客户端技术,如使用javascript捕获点击并生成到服务器的ajax发布请求,Inoder可以避免CSRF攻击,并提供快速中间件(https://github.com/expressjs/csurf)
我最终通过使用jQuery创建了自己的方法来处理它们(但也可以使用javascript)。
在我的情况下,我想通过POST发送的任何链接都必须:
- 包含类
postLink
- 在
href
属性中包含目标URL - 在
data-csrf
属性中包含CSRF令牌 - (可选)包含
data-confirm
属性,以指定在发送POST请求之前显示为确认的消息
视图中的链接看起来是这样的:
<a href="/reject/23" class="postLink" data-confirm="Are you sure you want to reject this item?" data-csrf="NdiuZynW-thVmMqYPZqFFGxGcInQZn35mDf8">
Reject
</a>
或者没有确认属性:
<a href="/reject/23" class="postLink" data-csrf="NdiuZynW-thVmMqYPZqFFGxGcInQZn35mDf8">
Reject
</a>
所需的jQuery代码如下:
$(document).on('click', '.postLink', function(e){
e.preventDefault();
var url = $(this).attr('href');
var csrf = $(this).data('csrf');
var confirmed = false;
if(typeof $(this).data('confirm') !== 'undefined'){
if(confirm($(this).data('confirm'))){
confirmed = true;
};
}else{
confirmed = true;
}
if(confirmed){
$('body').append(''
<form action="'+ url +'" method="post" name="postLink" style="display:none;">'
<input type="hidden" name="_csrf" value="'+ csrf +'" />'
</form>'
');
$('form[name="postLink"').submit();
}
});
基本上,它所做的是应用与我在问题中提到的为每个POST链接创建表单相同的技术。唯一的区别是,我不必每次创建POST链接时都麻烦创建一个表单。
通过这种方式,表单将被动态创建并附加到body
。然后提交。
为了确保安全,我使用了express.js.的CSRF模块
如果您不需要安全的POST链接,那么您可能可以使用jQuery的postLink插件。
相关文章:
- 是一个javascript bookmarklet,可以设置破坏跨域安全的域cookie
- 构建一个HTML小部件来嵌入付费内容-如何确保与后端的通信安全
- 为什么我不能强制下载受污染的画布,为什么这是一个安全问题
- 让用户通过javascript访问cookie是一个安全问题
- json 一个 html 的安全方法
- 在 JavaScript 中呈现一个安全的 HTML 子集
- 安全问题是将我的访问者带到一个危险的下载页面
- 从前一个事务的完整回调开始打开新的 IndexedDb 事务是否安全
- 是一个经过SSL处理的JSONAPI,它使用cookie进行身份验证,并且随机数通常是安全的
- 如何在没有安全警告的情况下将一个 html 加载到另一个 html 中
- 在一个简单的网站上违反了内容安全策略指令
- 在express.js中创建一个安全的POST链接
- 如何让Javascript客户端创建一个安全的UUID
- 如何创建一个安全的PHP &;javascript api
- 如何将一个安全的、仅限http的cookie作为承载令牌呈现(不使用Angular.JS)
- 使用innerHTML插入内容不执行