Web安全之XSS攻擊demo

Web安全之XSS攻擊demo

環(huán)境:

本地html文件,IE瀏覽器(谷歌會屏蔽跨域請求,需要部署什么的操作易迹,這里一切從簡),django后臺平道,mysql數(shù)據(jù)庫

前端

前端代碼(將注冊睹欲、登錄、首頁三個頁面集合在一起):

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title></title>
    <script type="text/javascript" src="jquery.min.js"></script>
    <script>
        //注冊請求
        function regi(){
            username = document.getElementById(1).value
            password = document.getElementById(2).value
            nickname = document.getElementById(3).value
            $.ajax({
              type: 'POST',
              url: "http://127.0.0.1:8000/regist",
              header:{
                ContentType:'application/x-www-form-urlencoded'
              },
              data: {username:username,password:password,nickname:nickname},
              dataType:'json',
              success: function(res){
                if(res.state=='ok'){
                    alert("注冊成功")
                }else{
                    alert('注冊失敗')
                }
              },
            });
        }
        //登錄請求
        function login(){
            username = document.getElementById(4).value
            password = document.getElementById(5).value
            $.ajax({
              type: 'POST',
              url: "http://127.0.0.1:8000/login",
              header:{
                ContentType:'application/x-www-form-urlencoded'
              },
              data: {username:username,password:password},
              dataType:'json',
              success: function(res){
                console.log(res)
                if(res!=null && res != ''){
                    alert('登錄成功')
                    document.getElementById(6).innerHTML = res[0].nickname
                }else{
                    alert('登錄失敗')
                }
              },
            });
        }
    </script>
</head>
<body>
    <div align="center" style="padding-top: 100px;border:1px;border-style: solid;padding-bottom: 100px">
        <h2>注冊</h2>
        <input id=1 type='text' placeholder="用戶名" value="" />
        <input id=2 type='text' placeholder="密碼" value="" />
        <input id=3 type='text' placeholder="昵稱" value="" />
        <input onclick="regi()" type="button" value="點(diǎn)擊">
    </div>
    <div align="center" style="padding-top: 100px;border:1px;border-style: solid;padding-bottom: 100px">
        <h2>登錄</h2>
        <input id=4 type='text' placeholder="用戶名" value="" />
        <input id=5 type='text' placeholder="密碼" value="" />
        <input onclick="login()" type="button" value="點(diǎn)擊">
    </div>
    <div align="center" style="padding-top: 100px;border:1px;border-style: solid;padding-bottom: 100px">
        <h2>首頁</h2>
        <div>
            昵稱:<p id=6></p>
        </div>
    </div>
    
</body>
</html>

前端界面展示(此處比較low逼一屋,勿噴):

在這里插入圖片描述

后端

后端環(huán)境

  • 利用破解版的pycharm專業(yè)版窘疮,或者社區(qū)版的pycharm創(chuàng)建一個django項(xiàng)目

  • 安裝pymysql庫(用來連接數(shù)據(jù)庫),記得修改settings.py統(tǒng)計(jì)目錄下的init.py

      import pymysql
      pymysql.install_as_MySQLdb()
    
  • 配置連接的數(shù)據(jù)庫冀墨,將settings.py中的DATABASES修改為如下:

      DATABASES = {
          'default': {
              'ENGINE': 'django.db.backends.mysql',
              'NAME': 'demo',
              'USER': 'root',
              'PASSWORD': '123456',
              'HOST': '10.18.62.2',
              'PORT': '3306'
          }
      }
    
  • 將項(xiàng)目名添加值settings.py的INSTALLED_APPS中瀑罗,如下列的demo咽袜,如果不添加坝辫,后面可能會報(bào)引入models.py文件錯誤

      INSTALLED_APPS = [
          'django.contrib.admin',
          'django.contrib.auth',
          'django.contrib.contenttypes',
          'django.contrib.sessions',
          'django.contrib.messages',
          'django.contrib.staticfiles',
          ‘demo'
      ]
    
  • views.py文件代碼创橄,用于處理前端的請求

      from django.http import HttpResponse
      from demo.models import Users
      from json import dumps
      def regist(request):
          nickname = request.POST.get('nickname')
          username = request.POST.get('username')
          password = request.POST.get('password')
          Users.objects.create(nickname=nickname,username=username,password=password)
          return HttpResponse(dumps({'state':'ok'}))
      
      def login(request):
          username = request.POST.get('username')
          password = request.POST.get('password')
          res = list(Users.objects.filter(username=username,password=password).values())
          return HttpResponse(dumps(res))
    
  • url.py文件代碼,用于將前端請求的url映射到指定的方法進(jìn)行處理

      from django.urls import path
      from demo import views
      urlpatterns = [
          #注冊
          path('regist', views.regist),
          #登錄
          path('login', views.login)
      ]
    

正常演示

  • 正常注冊
在這里插入圖片描述
  • 正常登錄


    在這里插入圖片描述
  • 正常顯示


    在這里插入圖片描述

XSS攻擊演示

  • XSS注冊:將顯示與界面上的字段虫腋,用html標(biāo)簽來注冊骄酗,這里顯示的字段是nickname,寫成:

      //超鏈接標(biāo)簽指向我的csdn博客中的一篇文章悦冀,這個超鏈接包含了這篇文章中的一張圖片趋翻,效果:點(diǎn)擊這張圖片會跳轉(zhuǎn)至我的博客
      <a ><image src='https://img-blog.csdnimg.cn/20190410112515201.png' /></a>
    
在這里插入圖片描述
  • XSS登錄:與正常登錄一樣


    在這里插入圖片描述
  • XSS顯示


    在這里插入圖片描述
  • 點(diǎn)擊后跳轉(zhuǎn)至我的csdn中的一片文章


    在這里插入圖片描述

原理

由于用戶輸入的數(shù)據(jù)可能帶有具有攻擊行的html標(biāo)簽或者js代碼,而瀏覽器將用戶的輸入直接渲染出來所以會造成這樣的效果

避免

  • 將特殊字符過濾或者轉(zhuǎn)義
  • 良好的代碼習(xí)慣雏门,多思考自己的代碼會不會有沒有漏洞

代碼

demo

小結(jié)

歡迎各位大佬進(jìn)來討論嘿歌,共同進(jìn)步

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末掸掏,一起剝皮案震驚了整個濱河市茁影,隨后出現(xiàn)的幾起案子宙帝,更是在濱河造成了極大的恐慌,老刑警劉巖募闲,帶你破解...
    沈念sama閱讀 218,525評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件步脓,死亡現(xiàn)場離奇詭異,居然都是意外死亡浩螺,警方通過查閱死者的電腦和手機(jī)靴患,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,203評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來要出,“玉大人鸳君,你說我怎么就攤上這事』减澹” “怎么了或颊?”我有些...
    開封第一講書人閱讀 164,862評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長传于。 經(jīng)常有香客問我囱挑,道長,這世上最難降的妖魔是什么沼溜? 我笑而不...
    開封第一講書人閱讀 58,728評論 1 294
  • 正文 為了忘掉前任平挑,我火速辦了婚禮,結(jié)果婚禮上系草,老公的妹妹穿的比我還像新娘通熄。我一直安慰自己,他們只是感情好找都,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,743評論 6 392
  • 文/花漫 我一把揭開白布唇辨。 她就那樣靜靜地躺著,像睡著了一般檐嚣。 火紅的嫁衣襯著肌膚如雪助泽。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,590評論 1 305
  • 那天嚎京,我揣著相機(jī)與錄音嗡贺,去河邊找鬼。 笑死鞍帝,一個胖子當(dāng)著我的面吹牛诫睬,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播帕涌,決...
    沈念sama閱讀 40,330評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼摄凡,長吁一口氣:“原來是場噩夢啊……” “哼续徽!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起亲澡,我...
    開封第一講書人閱讀 39,244評論 0 276
  • 序言:老撾萬榮一對情侶失蹤钦扭,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后床绪,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體客情,經(jīng)...
    沈念sama閱讀 45,693評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,885評論 3 336
  • 正文 我和宋清朗相戀三年癞己,在試婚紗的時候發(fā)現(xiàn)自己被綠了膀斋。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,001評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡痹雅,死狀恐怖仰担,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情绩社,我是刑警寧澤摔蓝,帶...
    沈念sama閱讀 35,723評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站铃将,受9級特大地震影響项鬼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜劲阎,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,343評論 3 330
  • 文/蒙蒙 一绘盟、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧悯仙,春花似錦龄毡、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,919評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至货岭,卻和暖如春路操,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背千贯。 一陣腳步聲響...
    開封第一講書人閱讀 33,042評論 1 270
  • 我被黑心中介騙來泰國打工屯仗, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人搔谴。 一個月前我還...
    沈念sama閱讀 48,191評論 3 370
  • 正文 我出身青樓魁袜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子峰弹,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,955評論 2 355

推薦閱讀更多精彩內(nèi)容