Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 免费看欧美一级特黄a大片,高清国产一级毛片国语,91一区二区视频

          整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          轉換csv文件為插入的sql腳本web端實現方案

          轉換csv文件為插入的sql腳本web端實現方案

          景:

          上一篇文章分享了一個本地的實現方案,但是這個盡管打包成exe的完整包的方式,由于實現方式是使用python,打包出來后的文件里包含了使用到的庫和python運行程序,啟動時內部會需要解壓出來,所以啟動會比較慢,大概3~5秒啟動,對于追求性能的優秀人才就會覺得這個效率太低了,那能不能實現一個web方案,這樣web端提供一個傳入需要轉換的文件,然后返回一個轉換好的文件,這樣就不需要每個人的包都那么大,運行還慢,而且還沒法實時更新。

          解決方案:

          1.通過web前端進行文件上傳到服務器上,設置一個提交頁面模板文件uploader.html

          <html>
          <head>
              <meta charset="UTF-8">
            <title>文件上傳</title>
          </head>
          <body>
              <form action="/uploadfile" method="POST" enctype="multipart/form-data">
                  <input type="file" name="uploadfile"  />
                  <input type="submit" value="提交" />
              </form>
          </body>
          </html>

          2.創建一個接口進行文件的上傳,利用flask進行接口生成

          from flask import Flask
          
          from biz.openapi.com_api_webres import blue_webres_mgr
          
          webapp=Flask(__name__, template_folder='../biz/templates')
          webapp.register_blueprint(blueprint=blue_webres_mgr)
          
          if __name__=='__main__':
              webapp.run(port=8083)
          
          blue_webres_mgr=Blueprint('webres_mgr', __name__, template_folder='../templates')
          webconfig={}
          webconfig['UPLOAD_FOLDER']='../upload/'
          
          @blue_webres_mgr.route('/upload')
          def upload_file():
              return render_template('uploader.html')
          
          @blue_webres_mgr.route('/uploadfile',methods=['GET','POST'])
          def uploader_File():
              if request.method=='POST':
                  f=request.files['uploadfile']
                  basefilepath=os.path.join(webconfig['UPLOAD_FOLDER']) + f.filename
                  newfilename=''
                  if os.path.exists(basefilepath):
          
                      fileext=os.path.splitext(f.filename)[-1]
                      filename=os.path.basename(f.filename).split(fileext)[0]
                      newfilename="{}_{}{}".format(filename, int(time.time()), fileext)
                      basefilepath="{}{}".format(os.path.join(webconfig['UPLOAD_FOLDER']),newfilename)
          
                  f.save(basefilepath)
                  transcsv=TransCSVDataToSql(basefilepath)
                  filepath, webdir, sqlfile=transcsv.TransFile()
                  linkurl='http://127.0.0.1/{}/{}'.format(webdir, sqlfile)
                  return render_template('downloadsql.html',transfile=f.filename,respath=filepath,linkurl=linkurl, sqlfile=sqlfile)
              else:
                  return render_template('uploader.html')

          3.利用nginx建立一個web網站服務,可以直接使用phpstudy一鍵部署

          啟動nginx就可以了,當然如果需要配置不同的端口,還有地址的,自行通過配置按鈕進行配置

          4.調用上一篇文章中的文件讀取,轉換的實現類進行文件的轉換和存儲

          轉換后的文件直接存放到web網站的www下的工程目錄下

          首先配置好自己的目錄地址

          def __init__(self, csvFile:str):
              self.CSVFile=csvFile
              # 保存的文件名
              self.SaveFile='trans_{}.sql'.format(time.time())
              # 項目保存的目錄
              self.WebDir='softfiles'
              # phpstudy指定的www所在目錄+項目的目錄
              self.WebbasePath='D:/phpstudy_pro/WWW/softfiles/'

          配置的是WWW就是網站下的softfiles目錄下

          5.輸出網站可以訪問到的頁面下載地址

          配置web可以訪問的到的地址

          linkurl='http://127.0.0.1/{}/{}'.format(webdir, sqlfile)

          如果發布在公網或者內網上,則把127.0.0.1的IP更改為部署好的服務器域名或IP即可

          配置下載頁面的html模板downloadsql.html

          <!DOCTYPE html>
          <html lang="en">
          <head>
              <meta charset="UTF-8">
              <title>轉換好的sql</title>
          </head>
          <body>
          <table border="1">
              <tr>
                  <th>文件所在路徑</th>
                  <th>需要轉換的csv文件</th>
                  <th>轉換完成的sql文件</th>
                  <th>下載地址</th>
              </tr>
              <tr>
                  <td>{{respath}}</td>
                  <td>{{transfile}}</td>
                  <td>{{sqlfile}}</td>
                  <td><a href={{linkurl}}>下載地址</a></td>
              </tr>
          </table>
          
          </body>
          </html>

          6.來看看最終的效果吧

          啟動服務端,

          啟動Nginx,在瀏覽器中輸入

          127.0.0.1:8083/upload

          出現頁面

          然后點擊瀏覽,打開導出的csv文件

          選擇好后點擊打開,最后點擊頁面中的“提交”按鈕

          會展現一個下載頁面地址

          點擊下載地址即可進行轉換后的文件的下載,然后就可以使用這個sql腳本進行刷庫了

          結語:

          通過這個web端的轉換,對于使用用戶來說,只需要輸入一個地址,然后上傳文件即可完成轉換工作,比本地版要快速很多,而且只要web端更新了新的解析規則,自己都不需要去處理,自然就能使用到最新的,啟動效率也是大大提升。

          好了,今天的分享就到這了,感謝大家的閱讀!

          話說選擇不對,努力白費,對于C#的學習也是一樣方向不對努力白費。

          新手或者有經驗的開發者學習c#時往往不知道該學習哪個技術,哪些框架。

          盲目的學習會導致不足以學以致用,下面就來分享幾個學習路線圖。

          一、后端開發路線

          這條線路是純后端開發,主要做服務端開發,前后端分離是當下的主流開發模式。該路線方向需要學習以下技能:

          1、基礎知識:c#基礎知識、Asp.Net Core相關知識、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學習EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數據庫:MySql、SqlServer 深入學習其中一種即可,另一種需要熟悉

          4、日志組件:NLog或者Serilog

          5、定時框架:Quartz.Net Core或者Handfire

          6、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          7、架構方面:經典三層、熟悉DDD架構模式(可選)、熟悉微服務(可選)

          8、CICD:熟悉Linux操作系統、Git代碼管理器、Doker(可選)、K8s(可選)

          二、c/s客戶端開發路線

          當下物聯網開發正火很多大廠都在招物聯網技術開發

          1、基礎知識:c#基礎知識、Asp.Net Core相關知識、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學習EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數據庫:MySql、SqlServer 深入學習其中一種即可,另一種需要熟悉

          4、日志組件:NLog或者Serilog

          5、定時框架:Quartz.Net Core或者Handfire

          6、客戶端方面:Wpf(深入學習)、MQtt協議、Winfrom(可選)

          7、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          8、架構方面:經典三層、熟悉DDD架構模式(可選)、熟悉微服務(可選)

          9、CICD:熟悉Linux操作系統、Git代碼管理器、Doker(可選)、K8s(可選)

          三、Web全棧開發路線1

          該路線是全棧開發,需要學習前端的一些基礎知識:

          1、基礎知識:c#基礎知識、Asp.Net Core相關知識、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學習EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數據庫:MySql、SqlServer 深入學習其中一種即可,另一種需要熟悉

          4、日志組件:NLog或者Serilog

          5、定時框架:Quartz.Net Core或者Handfire

          6、前端方面:Asp.Net Mvc、js、html、css、Vue(React、Angula js)

          7、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          8、架構方面:經典三層、熟悉DDD架構模式(可選)、熟悉微服務(可選)

          9、CICD:熟悉Linux操作系統、Git代碼管理器、Doker(可選)、K8s(可選)

          四、Web全棧開發路線2

          c#全棧開發方向,使用c#開發前后端功能,不需要學習js和html

          1、基礎知識:c#基礎知識、Asp.Net Core相關知識、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學習EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數據庫:MySql、SqlServer 深入學習其中一種即可,另一種需要熟悉

          4、日志組件:NLog或者Serilog

          5、定時框架:Quartz.Net Core或者Handfire

          6、前端方面:Blazer(深入學習)

          7、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          8、架構方面:經典三層、熟悉DDD架構模式(可選)、熟悉微服務(可選)

          9、CICD:熟悉Linux操作系統、Git代碼管理器、Doker(可選)、K8s(可選)

          五、游戲開發路線

          1、基礎知識:c#基礎知識、Asp.Net Core相關知識、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學習EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、游戲引擎:Unity3d(深入學習)

          4、日志組件:NLog或者Serilog

          5、定時框架:Quartz.Net Core或者Handfire

          6、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          7、架構方面:經典三層、熟悉DDD架構模式(可選)、熟悉微服務(可選)

          8、CICD:熟悉Linux操作系統、Git代碼管理器、Doker(可選)、K8s(可選)

          六、移動端開發路線

          如果你項從事開發移動應用,使用c#開發原生安卓、IOS、Mac 應用你需要掌握以下技術

          1、基礎知識:c#基礎知識、Asp.Net Core相關知識、Asp.Net Core Web Api、Asp.Net Core Aap.Net Mvc(可選) 、Grpc

          2、ORM:主要學習EF Core、Dapper(其他流行ORM也行但盡量走主流路線)

          3、數據庫:SqlLite

          4、日志組件:NLog或者Serilog

          5、定時框架:Quartz.Net Core或者Handfire

          6、客戶端方面:Xamarin(深入學習)、Maui

          7、分布式組件:Redis、RabbitMQ、Mongdb(可選)、Kafka(可選)

          8、架構方面:經典三層、熟悉DDD架構模式(可選)、熟悉微服務(可選)

          9、CICD:熟悉Linux操作系統、Git代碼管理器、Doker(可選)、K8s(可選)

          學習路線四五條總有你在用的一條,如果你還有其他路線歡迎留言,一起探討新的學習方向。

          #學編程#

          背景

          京東SRC(Security Response Center)收錄大量外部白帽子提交的sql注入漏洞,漏洞發生的原因多為sql語句拼接和Mybatis使用不當導致。

          2 手工檢測

          2.1 前置知識

          mysql5.0以上版本中存在一個重要的系統數據庫information_schema,通過此數據庫可訪問mysql中存在的數據庫名、表名、字段名等元數據。information_schema中有三個表成為了sql注入構造的關鍵。

          1)infromation_schema.columns:

          • table_schema 數據庫名
          • table_name 表名
          • column_name 列名

          2)information_schema.tables

          • table_schema 數據庫名
          • table_name 表名

          3)information_schema.schemata

          • schema_name 數據庫名

          SQL注入常用SQL函數

          • length(str) :返回字符串str的長度
          • substr(str, pos, len) :將str從pos位置開始截取len長度的字符進行返回。注意這里的pos位置是從1開始的,不是數組的0開始
          • mid(str,pos,len) :跟上面的一樣,截取字符串
          • ascii(str) :返回字符串str的最左面字符的ASCII代碼值
          • ord(str) :將字符或布爾類型轉成ascll碼
          • if(a,b,c) :a為條件,a為true,返回b,否則返回c,如if(1>2,1,0),返回0

          2.2 注入類型

          2.2.1 參數類型分類

          • 整型注入
            例如?id=1,其中id為注入點,類型為int類型。
          • 字符型注入
            例如?id=”1”,其中id為注入點,類型為字符型,要考慮閉合后端sql語句中的引號。

          2.2.2 注入方式分類

          • 盲注
          • 布爾盲注:只能從應用返回中推斷語句執行后的布爾值。
          • 時間盲注:應用沒有明確的回顯,只能使用特定的時間函數來判斷,例如sleep,benchmark等。
          • 報錯注入:應用會顯示全部或者部分的報錯信息
          • 堆疊注入:有的應用可以加入 ; 后一次執行多條語句
          • 其他

          2.3 手動檢測步驟(字符型注入為例)

           // sqli vuln code
                      Statement statement=con.createStatement();
                      String sql="select * from users where username='" + username + "'";
                      logger.info(sql);
                      ResultSet rs=statement.executeQuery(sql);
          // fix code 如果要使用原始jdbc,請采用預編譯執行
                      String sql="select * from users where username=?";
                      PreparedStatement st=con.prepareStatement(sql);

          使用未預編譯原始jdbc作為demo,注意此demo中sql語句參數采用單引號閉合。

          2.3.1 確定注入點

          對于字符類型注入,通常先嘗試單引號,判斷單引號是否被拼接到SQL語句中。推薦使用瀏覽器擴展harkbar作為手工測試工具。https://chrome.google.com/webstore/detail/hackbar/ginpbkfigcoaokgflihfhhmglmbchinc

          正常頁面應該顯示如下:

          admin后加單引號導致無信息回顯,原因是后端sql執行報錯,說明引號被拼接至SQL語句中

          select * from users where username='admin'  #正常sql
          select * from users where username='admin'' #admin'被帶入sql執行導致報錯無法顯示信息

          2.3.2 判斷字段數

          mysql中使用order by 進行排序,不僅可以是字段名也可以是字段序號。所以可以用來判斷表中字段數,order by 超過字段個數的數字就會報錯。

          判斷字段數

          當order by 超過4時會報錯,所以此表共四個字段。

          后端所執行的sql語句

          select * from users where username='admin' order by 1-- '

          此處我們將原本username的值admin替換為admin’ order by 1 —+,其中admin后的單引號用于閉合原本sql語句中的前引號,—+用于注釋sql語句中的后引號。—后的+號主要作用是提供一個空格,sql語句單行注釋后需有空格,+會被解碼為空格。

          2.3.3 確定回顯位置

          主要用于定位后端sql字段在前端顯示的位置,采用聯合查詢的方式確定。注意聯合查詢前后字段需一致,這也就是我們為什么做第二步的原因。

          通過下圖可知,后端查詢并回顯的字段位置為2,3位。

          聯合查詢后的字段可以隨意,本次采用的是數字1到4直觀方便。

          2.3.4 利用information_schema庫實現注入

          group_concat()函數用于將查詢結果拼接為字符串。

          • 查看存在數據庫

          • 查看當前數據庫中的表

          • 查看指定表中字段

          • 利用以上獲取信息讀取users表中username和password

          3 自動化檢測

          3.1 sqlmap 使用

          sqlmap兼容python2和python3,可以自動化檢測各類注入和幾乎所有數據庫類型。

          3.1.1 常用命令

          -u  可能存在注入的url鏈接
          -r讀取http數據包
          --data 指定post數據
          --cookie 指定cookie
          --headers 指定http頭 如采用token認證的情況下
          --threads 指定線程數
          --dbms 指定后端的數據庫
          --os 指定后端的操作系統類型
          --current-user 當前用戶
          --users 所有用戶
          --is-dba 是否是dba
          --sql-shell 交互式的sqlshell
          -p指定可能存在注入點的參數
          --dbs 窮舉系統存在的數據庫
          -D指定數據庫
          --tables 窮舉存在的表
          -T指定表
          --column 窮舉字段
          -C指定字段
          --dump dump數據

          直接檢測
          其中—cookie用于指定cookie,—batch 自動化執行,—dbms指定數據庫類型

          檢測結果

          讀取系統中存在數據庫
          —dbs讀取當前用戶下的數據庫

          讀取指定庫下的表
          -D java_sec_code —tables

          dump users表數據
          -D java_sec_code -T users —dump

          4 進階

          4.1 Mybatis注入

          1)$錯誤使用導致注入

          //采用#不會導致sql注入,mybatis會使用預編譯執行
              @Select("select * from users where username=#{username}")
              User findByUserName(@Param("username") String username);
          //采用$作為入參可導致sql注入
              @Select("select * from users where username='${username}'")
              List<User> findByUserNameVuln01(@Param("username") String username);

          2)模糊查詢拼接

          //錯誤寫法
            <select id="findByUserNameVuln02" parameterType="String" resultMap="User">
                  select * from users where username like '%${_parameter}%'
              </select>
          
           //正確寫法
           <select id="findByUserNameVuln02" parameterType="String" resultMap="User">
                  select * from users where username like concat(‘%’,#{_parameter}, ‘%’)  
              </select>

          3)order by 注入

          order by 后若使用#{}會導致報錯,因為#{}默認添加引號會導致找不到字段從而報錯。

             //錯誤寫法 
          <select id="findByUserNameVuln03" parameterType="String" resultMap="User">
                  select * from users
                  <if test="order !=null">
                      order by ${order} asc
                  </if>
              </select>
          //正確寫法 id指字段id 此表字段共四個 所以id為1-4
              <select id="OrderByUsername" resultMap="User">
                  select * from users order by id asc limit 1
              </select>

          以上測試均在本地進行,請勿未授權進行滲透測試

          5 文章及資料推薦

          slqmap手冊:https://octobug.gitbooks.io/sqlmap-wiki-zhcn/content/Users-manual/Introduction.html
          sql注入詳解:http://sqlwiki.radare.cn/#/


          作者:羅宇(物流安全小分隊)


          主站蜘蛛池模板: 三上悠亚精品一区二区久久| 日韩一区二区三区电影在线观看| 日韩精品区一区二区三VR| 亚洲av无码一区二区三区天堂| 熟妇人妻一区二区三区四区| 日韩伦理一区二区| 交换国产精品视频一区| 久久精品动漫一区二区三区| 又硬又粗又大一区二区三区视频| 精品在线一区二区| 日韩伦理一区二区| 尤物精品视频一区二区三区| 亚欧在线精品免费观看一区| 91久久精品午夜一区二区| 国产亚洲日韩一区二区三区| aⅴ一区二区三区无卡无码| 国产一区二区免费在线| 精品国产一区二区麻豆| 韩国一区二区三区视频| 香蕉久久ac一区二区三区| 波多野结衣一区视频在线| 奇米精品视频一区二区三区| 久久久精品人妻一区二区三区 | 亚拍精品一区二区三区| 91精品福利一区二区三区野战| 无码一区二区三区| 亚洲国产一区二区三区青草影视 | 人妻无码第一区二区三区 | 亚洲欧洲精品一区二区三区| 国产suv精品一区二区33| 人妻天天爽夜夜爽一区二区| 精品人无码一区二区三区| 亚洲丶国产丶欧美一区二区三区| 日韩一区二区视频在线观看| 国产午夜精品片一区二区三区| 一区二区三区精密机械| 国产亚洲福利一区二区免费看 | 亚洲欧美国产国产综合一区| 麻豆va一区二区三区久久浪| 日韩国产一区二区| 国产亚洲欧洲Aⅴ综合一区|