• <kbd id="qyk40"></kbd>
  • <strike id="qyk40"></strike><samp id="qyk40"><pre id="qyk40"></pre></samp>

    Java Server Page(JSP)作為建立動態網頁的技術正在不斷升溫。JSP、ASP和PHP工作機制不太一樣。一般說來,JSP頁面在執行時是編譯式,而不是解釋式的。首次調用JSP文件其實是執行一個編譯為Servlet的過程。當瀏覽器向服務器請求這一個JSP文件的時候,服務器將檢查自上次編譯后JSP文件是否有改變,如果沒有改變,就直接執行Servlet,而不用再重新編譯,這樣,效率便得到了明顯提高。

    今天我將和大家一起從腳本編程的角度看JSP的安全,那些諸如源碼暴露類的安全隱患就不在這篇文章討論范圍之內了。寫這篇文章的主要目的是給初學JSP編程的朋友們提個醒,從一開始就要培養安全編程的意識,不要犯不該犯的錯誤,避免可以避免的損失。另外,我也是初學者,如有錯誤或其它意見請發帖賜教。

    一、認證不嚴——低級失誤

    如果要查看、修改某用戶的信息,就要用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是用來結帳的。

    1. <jsp:useBean id="myBasket" class="BasketBean">  
    2. <jsp:setProperty name="myBasket" property="*"/>  
    3. <jsp:useBean>  
    4. <html>  
    5. <head><title>Your Basket</title></head>  
    6. <body>  
    7. <p>  
    8. You have added the item  
    9. <jsp::getProperty name="myBasket" property="newItem"/>  
    10. to your basket.  
    11. <br/>  
    12. Your total is $  
    13. <jsp::getProperty name="myBasket" property="balance"/>  
    14. 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=ITEM0105342&balance=0  這樣,balance=0的信息就被在存儲到了JavaBean中了。當他們這時點擊“chekout”結賬的時候,費用就全免了。這與PHP中全局變量導致的安全問題如出一轍。由此可見:“property="*"”一定要慎用!

    三、長盛不衰的跨站腳本

    跨站腳本(Cross Site Scripting)攻擊是指在遠程WEB頁面的HTML代碼中手插入惡意的JavaScript, VBScript, ActiveX, HTML, 或Flash等腳本,竊取瀏覽此頁面的用戶的隱私,改變用戶的設置,破壞用戶的數據。跨站腳本攻擊在多數情況下不會對服務器和WEB程序的運行造成影響,但對客戶端的安全構成嚴重的威脅。

    四、時刻牢記SQL注入

    一般的編程書籍在教初學者的時候都不注意讓他們從入門時就培養安全編程的習慣。著名的《JSP編程思想與實踐》就是這樣向初學者示范編寫帶數據庫的登錄系統的(數據庫為MySQL)

    五、String對象帶來的隱患

    Java平臺的確使安全編程更加方便了。Java中無指針,這意味著 Java 程序不再像C那樣能對地址空間中的任意內存位置尋址了。在JSP文件被編譯成 .class 文件時會被檢查安全性問題,例如當訪問超出數組大小的數組元素的嘗試將被拒絕,這在很大程度上避免了緩沖區溢出攻擊。但是,String對象卻會給我們帶來一些安全上的隱患。如果密碼是存儲在 Java String 對象中的,則直到對它進行垃圾收集或進程終止之前,密碼會一直駐留在內存中。即使進行了垃圾收集,它仍會存在于空閑內存堆中,直到重用該內存空間為止。密碼 String 在內存中駐留得越久,遭到竊聽的危險性就越大。更糟的是,如果實際內存減少,則操作系統會將這個密碼 String 換頁調度到磁盤的交換空間,因此容易遭受磁盤塊竊聽攻擊。為了將這種泄密的可能性降至最低(但不是消除),您應該將密碼存儲在 char 數組中,并在使用后對其置零(String 是不可變的,無法對其置零)。

    穩定

    產品高可用性高并發

    貼心

    項目群及時溝通

    專業

    產品經理1v1支持

    快速

    MVP模式小步快跑

    承諾

    我們選擇聲譽

    堅持

    10年專注高端品質開發
    • 返回頂部
    国产精品福利一区二区| 无码国产精品一区二区免费模式 | 久久亚洲中文字幕精品一区四| 国产高清国产精品国产专区| 亚洲精品线在线观看| 国内精品久久久久久野外| 国产在线精品一区二区高清不卡| 一本色道久久88综合日韩精品| 亚洲AV日韩AV永久无码色欲| 日韩精品无码免费专区午夜 | 亚洲一区二区三区国产精品| 日韩中文在线视频| 日韩精品无码一区二区三区| 国产精品亚洲精品日韩已方| 内射中出日韩无国产剧情| 国产精品一区二区在线观看| 国产麻豆剧传媒精品国产免费| 久久精品国产亚洲AV天海翼| 亚洲国产精品无码久久九九大片 | 精品乱子伦一区二区三区高清免费播放 | 久久久久人妻一区精品果冻| 精品人妻少妇一区二区三区在线| 国产精品视频九九九| 国产99久久九九精品无码| 九九精品视频在线播放8| 亚洲国产精品激情在线观看| 亚洲无码精品浪潮| 好湿好大硬得深一点动态图91精品福利一区二区 | 亚洲精品tv久久久久久久久| 成人午夜亚洲精品无码网站| 最新精品露脸国产在线| 亚洲伊人久久精品影院| 久久精品国产99国产电影网| 久久只有这里的精品69| 无码人妻精品一区二区三区66 | 亚洲欧美日韩国产成人| 日韩人妻高清精品专区| 九九久久精品国产免费看小说| 亚洲精品无码专区2| 久久久91人妻无码精品蜜桃HD| 99久久成人国产精品免费|