国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

關(guān)于BBS的一些功能性補(bǔ)充以及踩坑記錄(持續(xù)補(bǔ)充)

hightopo / 547人閱讀

摘要:聲明以下記錄了本人實驗性地探索過程,不代表正確,請謹(jǐn)慎食用。取消注釋,并添加兩個屬性,。由于在中被設(shè)置成了的,所以并不適合加密存入。算法碰撞的可能性很小,因此基本可以保證和加密后都是獨一無二的,防止黑客用彩虹表爆表。

聲明:以下記錄了本人實驗性地探索過程,不代表正確,請謹(jǐn)慎食用。
也歡迎提出各種批評建議,幫助我改正錯誤。謝謝!

1.注冊

注冊時在注冊的jsp頁面使用js函數(shù)進(jìn)行合法性驗證(包括空值、兩次輸入密碼是否相同等),并設(shè)置為onclick或onsubmit觸發(fā)。
具體觸發(fā)順序如下
1) onclick: Y();

2) onsubmit: X();

3) submit();

第一種:onsubmit

在表單submit之前會調(diào)用onsubmit(),注意調(diào)用時為onsubmit="return CheckPost();"如果直接寫"CheckPost()"則無法生效。如果返回false則不會調(diào)用submit,返回true才會執(zhí)行到submit。




   
注冊



    
用戶名: 密碼: 確認(rèn)密碼:
第二種:onclick

點擊提交按鈕時觸發(fā),此時需要在函數(shù)中手動submit提交。




   
注冊



    
用戶名: 密碼: 確認(rèn)密碼:
2.加密 1.前端到后臺的安全性

在用戶登錄以及注冊時,有必要對數(shù)據(jù)進(jìn)行加密。任何語言最終都會形成html,事實上前端也只能處理html,css,js代碼,其他如java,php,c#都是在后端工作的,在html通過web服務(wù)器發(fā)送給訪問者的時候已經(jīng)脫離了后端的控制。因此前端的唯一加密手段就是js,但是js是明文的,也就是說你的加密過程是透明的,自然完全沒有破解難度。當(dāng)然,md5之類的單向加密依然無法破解,問題是后端拿到單向加密的數(shù)據(jù)完全沒用,因為它推導(dǎo)不出原始數(shù)據(jù)是什么。所以,要安全就用https。
設(shè)置Tomcat的HTTPS配置方法如下:
① keytool工具生成證書
打開 JDK 自帶的 keytool 目錄。

按住 Shift 鍵,同時右鍵點擊空白處。

此時,進(jìn)入cmd窗口。輸入下面命令。

keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "F:	omcat.keystore" 

接著會讓你填寫一些基本信息。

下面簡要介紹一下。

密鑰庫口令:123456(這個密碼非常重要)
名字與姓氏:localhost(以后訪問的域名或IP地址,非常重要,證書和域名或IP綁定)
組織單位名稱:anything(隨便填)
組織名稱:anything(隨便填)
城市:anything(隨便填)
省市自治區(qū):anything(隨便填)
國家地區(qū)代碼:anything(隨便填)

② 應(yīng)用證書到Tomcat
打開 Tomcat 配置文件 confserver.xml。
取消注釋,并添加兩個屬性 keystoreFile,keystorePass。


               
2.后臺數(shù)據(jù)的加密

后臺獲得數(shù)據(jù)(用戶名和密碼)后,需要對密碼數(shù)據(jù)進(jìn)行加密。由于username在mysql中被設(shè)置成了unique的,所以并不適合加密存入。這里只對密碼進(jìn)行加密。
加密方法為:
加密工具類:

import java.security.MessageDigest;
public class MD5Util {
    public final static String MD5(String s) {
        char hexDigits[]={"0","1","2","3","4","5","6","7","8","9","A","B","C","D","E","F"};       
        try {
            byte[] btInput = s.getBytes();
            // 獲得MD5摘要算法的 MessageDigest 對象
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            // 使用指定的字節(jié)更新摘要
            mdInst.update(btInput);
            // 獲得密文
            byte[] md = mdInst.digest();
            // 把密文轉(zhuǎn)換成十六進(jìn)制的字符串形式
            int j = md.length;
            char str[] = new char[j * 2];
            int k = 0;
            for (int i = 0; i < j; i++) {
                byte byte0 = md[i];
                str[k++] = hexDigits[byte0 >>> 4 & 0xf];
                str[k++] = hexDigits[byte0 & 0xf];
            }
            return new String(str);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

加密過程:

String salt =  MD5Util.MD5(username);
if(username.length()%2==0)
    password = password+salt;
else password = salt+password;
password = MD5Util.MD5(password);

通過unique的username通過MD5加密作為每個user獨有的salt,再將password與salt連接后再MD5加密。MD5算法hash碰撞的可能性很小,因此基本可以保證salt和password加密后都是獨一無二的,防止黑客用彩虹表爆表。
不建議將salt與用戶信息存在一起,防止數(shù)據(jù)庫被黑后黑客可以輕易破解用戶密碼。

存儲結(jié)果如下:

可以看到密碼已經(jīng)被加密。

3.防止SQL注入 1、檢查變量數(shù)據(jù)類型和格式

如果你的SQL語句是類似where id={$id}這種形式,數(shù)據(jù)庫里所有的id都是數(shù)字,那么就應(yīng)該在SQL被執(zhí)行前,檢查確保變量id是int類型;如果是接受郵箱,那就應(yīng)該檢查并嚴(yán)格確保變量一定是郵箱的格式,其他的類型比如日期、時間等也是一個道理。總結(jié)起來:只要是有固定格式的變量,在SQL語句執(zhí)行前,應(yīng)該嚴(yán)格按照固定格式去檢查,確保變量是我們預(yù)想的格式,這樣很大程度上可以避免SQL注入攻擊。

2、綁定變量,使用預(yù)編譯語句

使用PreparedStatement代替Statement是最有效也是最簡單的防止SQL注入的方式。

3、用戶數(shù)據(jù)加密

正如上面所說,對用戶數(shù)據(jù)進(jìn)行加密是一個必要的手段。雖說不能完全防止SQL注入攻擊,但是能增大黑客暴力破解的難度。

總之

1、不要隨意開啟生產(chǎn)環(huán)境中Webserver的錯誤顯示(避免1=1 1=2刺探漏洞以及爆字段)
2、永遠(yuǎn)不要信任來自用戶端的變量輸入,有固定格式的變量一定要嚴(yán)格檢查對應(yīng)的格式,沒有固定格式的變量需要對引號等特殊字符進(jìn)行必要的過濾轉(zhuǎn)義。
3、使用預(yù)編譯綁定變量的SQL語句。
4、做好數(shù)據(jù)庫帳號權(quán)限管理。
5、嚴(yán)格加密處理用戶的機(jī)密信息。

4.數(shù)據(jù)庫表的結(jié)構(gòu)選擇(存疑)

原來是用戶表用MyISAM 帖子表用InnoDB提高并發(fā)性。

1、用戶信息

我們將用戶id、用戶名、密碼存在一張表上,同時要確保id和用戶名是唯一的,這里我將id作為主鍵索引,用戶名作為唯一索引。選擇MyISAM存儲引擎,有以下原因:

對MyISAM表的讀操作(登錄、注冊前驗證),不會阻塞其他用戶對同一表的讀請求(其他用戶依然可以登錄),但會阻塞對同一表的寫(注冊)請求,對 MyISAM表的寫操作,則會阻塞其他用戶對同一表的讀和寫操作(注冊完成前,其他用戶不能進(jìn)行注冊驗證,否則會重復(fù)注冊);

雖然MyISAM寫的優(yōu)先度比較高,但是注冊的頻率遠(yuǎn)遠(yuǎn)小于登錄和驗證的頻率,所以不會出現(xiàn)用戶讀操作的饑餓狀態(tài)。

實現(xiàn)簡單

理論上也可以把用戶名作為主鍵。但不推薦,理由大概有:

用戶名可以是千奇百怪的字符串,而用ID(一般用guid或自增int)是比較規(guī)則字母數(shù)字序列,這可能導(dǎo)致性能上有所差別

假如以用戶名作為主鍵并與其他表關(guān)聯(lián),當(dāng)刪除用戶時,再創(chuàng)建一個同名的用戶,可能導(dǎo)致這些關(guān)聯(lián)紊亂。而絕對唯一的ID則不會。

后期可能會允許修改用戶名,如果以用戶名為主鍵,將帶來很多麻煩。而如果以ID為主鍵進(jìn)行關(guān)聯(lián),則沒有此問題。

2、帖子信息

主題帖包括以下字段:
id(主鍵索引) title(標(biāo)題) cont(內(nèi)容) pdata(發(fā)帖時間) user(作者)isleaf
回復(fù)貼包括以下字段:
id pid(父貼) rootid(主題帖id,建立索引) title cont(內(nèi)容) pdata(發(fā)帖時間) user(作者)isleaf

主題帖存儲引擎使用MyISAM,有以下原因:

只需要在主頁上顯示,讀多寫少,對并發(fā)要求低。

實現(xiàn)簡單,非聚簇索引占用空間小

回復(fù)帖存儲引擎使用InnoDB,有以下原因:

所有主題帖的回復(fù)都存儲在這一張表上,對并發(fā)要求高,盡管聚簇索引會占用大量空間,但是為了并發(fā)性能必須有所取舍。

InnoDB會在insert delete update語句默認(rèn)加排它鎖,但是select不加鎖。此時也不需要手動給select加共享鎖或排它鎖。

不能用MyISAM的另一個原因是,MyISAM的寫會阻塞所有的讀操作,不適用于大量寫的情況,容易降低性能

5.細(xì)節(jié)問題 1、在JS代碼中調(diào)用jsp的變量
2、設(shè)置操作成功后N秒后跳轉(zhuǎn)
3秒鐘后跳轉(zhuǎn),或者點擊下面跳轉(zhuǎn)。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/68831.html

相關(guān)文章

  • vue-cli +webpack+vue-router 踩坑

    摘要:其中定義了一些命令,還記得我們初始化項目完成后執(zhí)行其實就是執(zhí)行簡單的來說是運行時依賴生產(chǎn)環(huán)境,是開發(fā)時的依賴開發(fā)環(huán)境相應(yīng)的在安裝包時,有兩種命令參數(shù)可以把它們的信息寫入文件,會把依賴包名稱添加到文件鍵下,則添加到文件鍵下。 這次主要是記錄下自己在做vue-cli +webpack +vue-router 的經(jīng)歷 以及一些踩過的坑,算是做一個簡單的總結(jié) 一.vue的基本介紹 1)漸進(jìn)式的...

    OpenDigg 評論0 收藏0
  • 【浙政釘】微信-專有釘釘小程序-開發(fā)踩坑實記

    摘要:一開始的思路是先將微信小程序轉(zhuǎn)為釘釘小程序。接下來就是轉(zhuǎn)化階段,關(guān)于微信和釘釘具體可參考其開發(fā)文檔。 文章目錄 ?【浙政釘】微信-專有釘釘小程序-開發(fā)踩坑實記? ...

    widuu 評論0 收藏0
  • webuploader與網(wǎng)宿云踩坑

    摘要:上傳結(jié)構(gòu)與網(wǎng)宿云要求上傳結(jié)構(gòu)的不同上圖是翻自網(wǎng)宿云的文檔的分片上傳流程。鑒于網(wǎng)宿云的上傳一片一塊在邏輯上沒毛病,我們同樣能一塊一塊完成上傳這里注意請仔細(xì)看網(wǎng)宿云或七牛云分片上傳的文檔,了解如何分片上傳。 webuploader踩坑 webuploader是百度fex團(tuán)隊開發(fā)的一個十分便捷的上傳插件,但是我們在實際生產(chǎn)中,會發(fā)現(xiàn)使用它與我們的需求有各種各樣的出入。最近做上傳功能,踩了不少...

    Yi_Zhi_Yu 評論0 收藏0
  • 正則:個人使用和踩坑收集

    摘要:和的區(qū)別一個是貪婪和非貪婪匹配的問題需要了解兩者的區(qū)別可以看持續(xù)更新歡迎補(bǔ)充歡迎建議歡迎糾正 具體使用場景1 以任意長度分割字符創(chuàng) var arr = str.split(/s+/) 2 將三列的表格數(shù)據(jù)轉(zhuǎn)換成相應(yīng)的表格html字符串(前提將表格字符串通過word轉(zhuǎn)成‘xx xxx xx;xxx xx xx;xx xx xx;’的格式) var arr = str.split(;); ...

    Pandaaa 評論0 收藏0

發(fā)表評論

0條評論

hightopo

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<