phantomjs - PhantomJS 或 CasperJS 表单自动提交
问题描述
我正在建立一个利用 CSRF 漏洞的实验室任务。我需要一个机器人,它会访问我的页面并执行 JS:
<html>
<head>
</head>
<body>
<form action="http://localhost:9010/csrf/register.php" method="POST" id="csrf-form">
<input type="hidden" name="login" value="casper" />
<input type="hidden" name="password" value="casper" />
<input type="submit" value="Submit request"/>
</form>
</body>
<script>document.getElementById("csrf-form").submit()</script>
</html>
我无法使用 PhantomJS 或 CasperJS 继续它。我不知道不同学生的 HTML 代码会是什么样子(表单 id 属性可以不同),我只想在页面上执行 JS 代码。/opt/casperjs 中的 CasperJS 版本 1.1.4,使用 phantomjs 版本 2.1.1
var casper = require('casper').create();
casper.start('http://127.0.0.1/mypage.html');
解决方案
由于您不知道表单id
属性(并且由于其他元素属性特定于每个学生),因此您可以casper.fillXPath()
使用通用选择器来填写并自动提交您的表单。
例子:
casper.start('https://example.com/', function () {
this.fillXPath('form', {
'//form/input[@type="hidden"][1]': username,
'//form/input[@type="hidden"][2]': password,
}, true);
});
否则,您可以查看使用casper.fill()
, casper.fillSelectors()
,或者casper.fillLabels()
如果您了解有关表单中使用的选择器的更多信息。
如果您需要简单地将 JavaScript 执行到 Page DOM 环境中,您可以使用casper.evaluate()
.
推荐阅读
- javascript - Vue-Test-Utils、Jest、Unit-Test:无法使用子组件中的 mount 和 &refs 方法调用读取大子组件的属性
- python - 从文本文件中读取 Python 列表
- github - 使用个人访问令牌创建 Github 拉取请求所需的 OAuth 范围
- java - 必须在调用 save() edu.uptc.entity.Resident 之前手动分配此类的 id
- r - 为什么 glm 修剪一列?
- python - 如何获取嵌套列表的列表级别并将它们添加为元组?
- flutter - 如何在 Flutter 中绘制带有线条的列表
- r - R中的华夫饼图图标
- reactjs - 根据条件动态加载所有路由时如何重定向到路由?
- javascript - 在它们之间显示字符串