我试图通过使用 NGINX 反向代理将我的 Spring Boot 应用程序与我的前端(即我的 Angular 7+ 应用程序)分开。我的 Spring Boot 应用程序的版本是 2.0.3+.RELEASE 并且启用了 CSRF 保护。
我的安全配置如下所示:
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.httpBasic().and()
.authorizeRequests()
.antMatchers("/").permitAll()
.anyRequest().authenticated()
.and().csrf()
.csrfTokenRepository(CookieCsrfTokenRepository.withHttpOnlyFalse());
}
Run Code Online (Sandbox Code Playgroud)
我的 nginx.conf 如下所示:
events {
worker_connections 768;
}
http {
# Nginx will handle gzip compression of responses from the app server
gzip on;
gzip_proxied any;
gzip_types text/plain application/json;
gzip_min_length 1000;
server {
listen 80;
# Nginx will reject anything not matching /api
location /api {
# …Run Code Online (Sandbox Code Playgroud) 我想模拟CSRF Attack来检查我的网站漏洞.我在我的asp.net webapplication上试了但是没能模拟.所以请帮我模拟CSRF攻击.我有一个test.aspx模拟.
<form name="form1" id="form1" runat="server" method="post" action="mysite.com">
<script type="text/javascript">
document.cookie[".ASPXAUTH"] = "someaspxauth";
document.cookie["ASP.NET_SessionId"] = "somesessionid";
document.form1.submit();
</script>
</form>
Run Code Online (Sandbox Code Playgroud)
我还缺少什么?提前致谢.
我一直在使用CodeIgniter版本2.1.4与Ion Auth相当一段时间,一切都很好.昨天,我将Ion Auth更新到最新版本,现在每当我尝试"编辑"任何用户配置文件时,我都会收到CSRF错误.
"此表格帖子未通过我们的安全检查."
修改controllers/auth.php文件后出现此错误,以便将各种Ion Auth视图加载到我自己的模板中.毕竟,如果我无法将其集成到我的网站设计中,这有什么用处. 但是,即使auth.php控制器根本没有修改,我也会在较旧版本的Safari中出现此错误.
这是我对auth.php控制器文件的简单修改.
替换这一行:
$view_html = $this->load->view($view, $this->viewdata, $render);
Run Code Online (Sandbox Code Playgroud)
有了这条线:
$view_html = $this->template->load('default', $view, $this->viewdata, $render);
Run Code Online (Sandbox Code Playgroud)
是的,我的load功能(位于Template.php文件中/libraries/)从一开始就很好(几个月前).即使使用新版本的Ion Auth,我的模板加载功能也正常工作......但是,我只是不断收到安全错误,如上所述.
在做了一些研究之后,错误的原因是Ion Auth的CSRF安全例程.这两个函数在整个auth.php控制器中调用,并在_valid_csrf_nonce()函数返回时显示上面的错误false.
function _get_csrf_nonce()
{
$this->load->helper('string');
$key = random_string('alnum', 8);
$value = random_string('alnum', 20);
$this->session->set_flashdata('csrfkey', $key);
$this->session->set_flashdata('csrfvalue', $value);
return array($key => $value);
}
function _valid_csrf_nonce()
{
if ($this->input->post($this->session->flashdata('csrfkey')) !== FALSE &&
$this->input->post($this->session->flashdata('csrfkey')) == $this->session->flashdata('csrfvalue'))
{
return …Run Code Online (Sandbox Code Playgroud) 我正在尝试将CSRF保护添加到java Web应用程序中.我有web.xml配置了CSRF过滤器和过滤器到servlet的映射.但是,我不知道下一部分该怎么做.文档说,返回给客户端的所有URL都是通过调用HttpServletResponse #creditRedirectURL(String)或HttpServletResponse #creditURL(String)来编码的.他们还说你可以尝试:或者可以将nonce作为带有名称org的请求参数传回. apache.catalina.filters.CSRF_NONCE,它是常量org.apache.catalina.filters.Constants.CSRF_NONCE_REQUEST_PARAM的值.
更新 我仍然被禁止获得403.有人有什么建议吗?这是web.xml设置:
<filter>
<filter-name>CSRF</filter-name>
<filter-class>org.apache.catalina.filters.CsrfPreventionFilter</filter-class>
<init-param>
<param-name>entryPoints</param-name>
<param-value>/html,/html/</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CSRF</filter-name>
<servlet-name>exampleservlet</servlet-name>
</filter-mapping>
Run Code Online (Sandbox Code Playgroud)
这是JSP页面代码
<FORM METHOD="POST" ACTION="<%=response.encodeURL("/exampleservlet")%>">
<INPUT TYPE="HIDDEN" NAME="org.apache.catalina.filters.CSRF_NONCE" VALUE="<%=session.getAttribute("org.apache.catalina.filters.CSRF_NONCE")%>">
<INPUT TYPE="HIDDEN" NAME="id" VALUE="0">
Run Code Online (Sandbox Code Playgroud)
我究竟做错了什么?
我试图让csurf工作,但似乎偶然发现了什么.到目前为止,代码如下所示:
index.ejs
<form method="post" action="/">
<input type="hidden" name="_csrf" value="{{csrfToken}}">
.
.
</form>
Run Code Online (Sandbox Code Playgroud)
您在表单中插入密码和用户名的位置.
app.js
var express = require('express');
var helmet = require('helmet');
var csrf = require('csurf');
var path = require('path');
var favicon = require('serve-favicon');
var flash = require('connect-flash');
var logger = require('morgan');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var session = require('express-session');
var routes = require('./routes/index');
var users = require('./routes/users');
var profile = require('./routes/profile');
var app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs'); …Run Code Online (Sandbox Code Playgroud) 为什么laravel 5 csrf_token值始终为空?
我如何获得代币价值?
我试过了,
{!! csrf_token !!} , {{ csrf_token }} and
{{ Form::open() }} ....{{ Form::close() }}
Run Code Online (Sandbox Code Playgroud)
我的输出
<input type="hidden" name="_token"></input>
Run Code Online (Sandbox Code Playgroud) 我刚刚在Rails 5.0.0beta3上创建了一个带有几个表单的简单应用程序.
在开发中,使用Safari或Chrome上的http:// localhost:3000来访问应用程序,如果我填写表单并提交它,我总是会收到ActionController::InvalidAuthenticityToken错误.但是,如果我在填写并提交之前重新加载页面,那么它可以正常工作.
该应用使用默认值:
protect_from_forgery with: :exception 在ApplicationController中,<%= csrf_meta_tags %> 在html标题中通过应用程序布局,例:
<%= form_for @node, url: admin_book_nodes_url, as: :node do |form| %>
<%= render "form", f: form %>
<p><%= form.submit %> or <%= link_to "Cancel", admin_book_nodes_path %></p>
<% end %>
Run Code Online (Sandbox Code Playgroud)
日志:
Started POST "/admin/book/nodes" for ::1 at 2016-03-20 11:54:31 +0000
Processing by Admin::Book::NodesController#create as HTML
Parameters: {"utf8"=>"?", "authenticity_token"=>"/G5pF6hSPx0Vf21Fi0FCh+VlOcHY4w8C5lmHmwr3NQRjfXUP9/xboybeV3tevmyTyHcwSX8LplU/HgZVGDbGlw==", "node"=>{"parent_id"=>"1", "position"=>"1", "title"=>"lkjlkj", "description"=>"lkjlj", "published"=>"0", "content"=>"lkjlkj"}, "commit"=>"Create node"}
Can't verify CSRF token authenticity
Completed 422 …Run Code Online (Sandbox Code Playgroud) ruby-on-rails actioncontroller csrf-protection ruby-on-rails-5
根据Laravel 5.4 Docs,您可以通过将路由添加到中间件的$except属性来将其从CSRF验证中排除VerifyCsrfToken。但是由于某种原因,除非包含在主路径本身中,否则无法使用确切的路径名称排除带有参数的路径。
排除的预期路线:
protected $except = [
'main/{id}/sub/*'
];
Run Code Online (Sandbox Code Playgroud)
仅适用于:
protected $except = [
'main/*'
];
Run Code Online (Sandbox Code Playgroud)
如何从CSRF验证中排除带有参数的路由?
我正在使用paytabs付款网关api。在该api中,必须提供重定向网址,以便在交易完成后,页面将自动重定向到您指定的重定向网址。该网址是一个GET网址,但是由于api的响应是POST类型,因此我无法使用get网址。为了解决该问题,我将该路由设置为POST URL,但是通过将其设置为post方法,则没有获得任何CSRF令牌。最后,我得到了这个问题。
TokenMismatchException in VerifyCsrfToken.php line 68:
Run Code Online (Sandbox Code Playgroud)
有什么方法可以让我仅针对单个POST URL否定CSRF令牌功能?
-建议试用- 根据您的建议,我这样做了
class VerifyCsrfToken extends Middleware
{
protected $except = [
'signup/complete',
];
}
Run Code Online (Sandbox Code Playgroud)
现在越来越
Class 'Middleware' not found
Run Code Online (Sandbox Code Playgroud) 灵感来自:如何在ASP.NET MVC 4中默认防止CSRF?
有没有办法在ASP.NET Core中实现相同的结果?
csrf-protection ×10
csrf ×5
laravel ×3
php ×3
.net ×1
asp.net ×1
asp.net-core ×1
c# ×1
codeigniter ×1
express ×1
ion-auth ×1
javascript ×1
laravel-5 ×1
laravel-5.2 ×1
laravel-5.4 ×1
nginx ×1
node.js ×1
simulate ×1
spring-boot ×1
tomcat ×1
tomcat7 ×1