上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: xidili - 

新手求如何简单识别验证码

[复制链接]

该用户从未签到

1

主题

1

回帖

7

积分

助理工程师

积分
7
发表于 2023-4-15 18:23:07 | 显示全部楼层 | 阅读模式
悬赏2油猫币已解决

本帖最后由 xidili 于 2023-4-15 18:25 编辑

超新手啥也不会,刚开始学,求教。
网页登录需验证码,xhr获取user_auth_verify文件的响应有这个验证码,我可以直接读取这个code吗?还是如何解决比较好?

下面这个代码是能看到的js文件部分代码。
`` var code="";
// 绘制文字
for(var i=0;i <50;i++) {
ctx.fillStyle = '#86cffa';
ctx.beginPath();
ctx.arc(randomNum(0, width), randomNum(0, height),1,0,2 Math.PI);
ctx.fill();
}
var pool="abcdefghijkmnpqrstuvwxyz1234567890";
for(var i=0;i<=3;i++) {
if(captcha){
var txt = captcha[i];
}else{
var txt=pool[randomNum(0,pool.length)];
}
code=code+txt;
//随机生成字体颜色
ctx.fillStyle = '#141046';
//随机生成字体大小
ctx.font = '22px SimHei';
var x =18 + i
14
var y = 28;
//修改坐标原点和旋转角度
ctx.translate(x, y);
ctx.fillText(txt,0,0);
ctx.translate(-x, -y);
}
/绘制干扰点/

return code;

}
function get_code(type){
$.ajax({
url: '../../user_auth_verify.cgi',
type: 'POST',
data: '&submit=submit',
async: false,
timeout: 30000,
success: function(data) {
if(data.verify == 1){
$('#captchaImg').show();
drawCaptcha(data.code);
if(type && type == 'adv')
$('.login-box').addClass('code_show')
}else{
$('#code_cid').hide();
$('#captchaImg').hide();
$('.code-group').css("display","none")
}
},
error:function(){
drawCaptcha();
}
})
}

window.onload = function(){
$.ajaxSetup({
beforeSend: function (XMLHttpRequest,XMLObject) {
XMLHttpRequest.setRequestHeader("HTTP_X_REQUESTED_WITH", "xmlhttprequest");
var XMLObjData = XMLObject.data,repData = '';
if(XMLObjData && XMLObjData.indexOf('%')) repData = XMLObjData.replace(/\%/g,'%25');
else repData = XMLObjData;
var obj_data = decodeURIComponent(repData);
if(/[<>\^]|\b(sum()|\b(cmd|\')|(\'\s+[\s\S]\s+\')|(\'\s+\')|(confirm()|\b(echo\s+)|(:alert)\b|\b(eval\s()||||\b(\or\s+[\s\S]=[\s\S])|\b(and\s+[\s\S]=[\s\S])|(..\/)|(\$(..\/)|(window[location])|(window[\"location\"])|(window[\'location\'])|(window.location)|(..\/)|(\s<\simg\s)|(\s<\siframe\s)|\b(onerror\s)|\b(sleep\s)|\b(alert(\s)|\b(javascript:\s)|(--)|(\sping\s-n\s)|(\s+or\s+)|\b(exec\s+)|\b(master\s+)|\b(truncate\s+)|\b(declare\s+)|(\s+insert\s+)|\b(select\s+)|\b(delete\s+)|\b(update\s+)|\b(count\s()|(\s+chr\s()|(\s+mid\s()|(\s+chr\s()|(\s+chr\s()/.test(obj_data) ){
alert('输入操作中存在异常注入风险,请重新输入');
return false;
};
if(XMLObject.type=="GET"){
var urlString = XMLObject.url;
var reg = /(&Token.
?(?=&|$))|(Token.*?(?=&|$))/;
var UrlArray = XMLObject.url.match(reg);
if(UrlArray && UrlArray[0]){
var repalceString = UrlArray[0];
urlString = urlString.replace(repalceString,"");
}
XMLObject.url = urlString;
}
},
data:{
Token:stringtoaescovert("J112saasdftrU2NUTTI")
}
});
if(document.getElementById("captchaImg")){
document.getElementById("captchaImg").onclick = function(e) {
get_code();
}
}
};``

最佳答案

查看完整内容

可以劫持请求获取响应值,或者自己发请求,不过这些估计你一时半会理解不了,最简单的办法是劫持函数,如果这个drawCaptcha是全局函数的话,可以这样搞:
  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    891

    回帖

    1388

    积分

    荣誉开发者

    积分
    1388

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-4-15 18:23:08 | 显示全部楼层
    可以劫持请求获取响应值,或者自己发请求,不过这些估计你一时半会理解不了,最简单的办法是劫持函数,如果这个drawCaptcha是全局函数的话,可以这样搞:
    1. const _drawCaptcha = unsafeWindow.drawCaptcha;
    2. unsafeWindow.drawCaptcha = function(code) {
    3.     console.log(code);
    4.     return _drawCaptcha.call(this, code);
    5. };
    复制代码
    回复

    使用道具 举报

    该用户从未签到

    1

    主题

    1

    回帖

    7

    积分

    助理工程师

    积分
    7
    发表于 2023-4-21 18:03:39 | 显示全部楼层
    嗯,确实好用,能在控制台显示,但请问我如何才能调用它呢?@cxxjackie .拜谢。
    回复

    使用道具 举报

  • TA的每日心情
    慵懒
    2022-3-8 11:41
  • 签到天数: 2 天

    [LV.1]初来乍到

    22

    主题

    891

    回帖

    1388

    积分

    荣誉开发者

    积分
    1388

    荣誉开发者卓越贡献油中2周年生态建设者油中3周年挑战者 lv2

    发表于 2023-4-21 20:57:38 | 显示全部楼层
    xidili 发表于 2023-4-21 18:03
    嗯,确实好用,能在控制台显示,但请问我如何才能调用它呢?@cxxjackie .拜谢。 ...

    在console.log那个地方写你的脚本代码啊。
    回复

    使用道具 举报

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表