如何在phantomJS中正确添加csrf令牌
我想在phantomJS中以pdf格式获取网站的内容,这与phantomJS文档中描述的非常简单如何在phantomJS中正确添加csrf令牌,phantomjs,Phantomjs,我想在phantomJS中以pdf格式获取网站的内容,这与phantomJS文档中描述的非常简单 phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf 到目前为止还不错。我现在的问题是,我想要打印为pdf的网页需要一个用户登录并发布一个包含2个输入字段的表单!输入字段是开始日期和结束日期,用于生成所需网站的结果,该结果将在以后以pdf格式打
phantomjs rasterize.js 'http://en.wikipedia.org/w/index.php?title=Jakarta&printable=yes' jakarta.pdf
到目前为止还不错。我现在的问题是,我想要打印为pdf的网页需要一个用户登录并发布一个包含2个输入字段的表单!输入字段是开始日期和结束日期,用于生成所需网站的结果,该结果将在以后以pdf格式打印。该站点是用Django编写的,默认情况下需要csrf令牌。我写的这段代码不起作用,即使可以,也帮不了我,因为我无法在光栅化的帮助下使用它将页面内容转换为pdf
"use strict"
var page = require('webpage').create(),
server = 'http://10.0.3.201:8000/report/',
data = 'start_date=23.03.2016&end_date=24.03.2016';
page.settings.userName = 'ubuntu';
page.settings.password = 'ubuntu';
page.includeJS(
// Include the http version, you can change this to http if you like.
'https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js',
function() {
(page.evaluate(function getCookie(name) {
var cookieValue = null;
if (document.cookie && document.cookie != '') {
var cookies = document.cookie.split(';');
for (var i = 0; i < cookies.length; i++) {
var cookie = jQuery.trim(cookies[i]);
// Does this cookie string begin with the name we want?
if (cookie.substring(0, name.length + 1) == (name + '=')) {
cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
break;
}
}
}
return cookieValue;
}
phantom.addCookie({
'name' : 'csrf',
'value' : getCookie('csrftoken'),
'domain' : 'localhost',
'path' : 'report',
'httponly' : true,
'secure' : false,
'expires' : (new Date()).getTime() + (1000 * 60 * 60)
});
)
}
);
page.open(server, 'post', data, function(status) {
if (status !== 'success') {
console.log('Unable to post!');
} else {
console.log(page.content);
}
phantom.exit();
});
“使用严格的”
var page=require('webpage')。create(),
服务器http://10.0.3.201:8000/report/',
数据='开始日期=2016年3月23日和结束日期=2016年3月24日';
page.settings.userName='ubuntu';
page.settings.password='ubuntu';
page.includeJS(
//包括http版本,如果愿意,可以将其更改为http。
'https://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js',
函数(){
(第页)评估(函数getCookie(名称){
var-cookieValue=null;
if(document.cookie&&document.cookie!=''){
var cookies=document.cookie.split(“;”);
对于(变量i=0;i
我非常无知,甚至不知道我想用phantomJS做的事情是否可行。非常感谢您的帮助!Django在每次GET中使用csrf令牌设置一个cookie(如果在POST模板中配置了,则在表单的DOM中),但此cookie不用于验证服务器中的POST请求(这将导致安全漏洞)
Django似乎从标准POST正文(表单数据)或名为X-CSRFToken
的自定义HTTP头读取csrf令牌
因此,要伪造有效的请求,您必须模拟标准的用户交互:
- 访问为所需帖子创建csfr令牌的页面(可以是autopostback中的同一页面,也可以是另一个带有FormAction=“postDestination”)的页面。此响应将在表单DOM和cookie中附带csrf令牌
- 从cookie或DOM获取csrf令牌
- 在表单数据请求和/或自定义标头中伪造有效的POST请求设置令牌
- 您应该收到一个可以呈现为pdf的成功响应