摘要:聲明以下記錄了本人實驗性地探索過程,不代表正確,請謹(jǐn)慎食用。取消注釋,并添加兩個屬性,。由于在中被設(shè)置成了的,所以并不適合加密存入。算法碰撞的可能性很小,因此基本可以保證和加密后都是獨一無二的,防止黑客用彩虹表爆表。
聲明:以下記錄了本人實驗性地探索過程,不代表正確,請謹(jǐn)慎食用。
也歡迎提出各種批評建議,幫助我改正錯誤。謝謝!
注冊時在注冊的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。
第二種:onclick注冊
點擊提交按鈕時觸發(fā),此時需要在函數(shù)中手動submit提交。
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ī)密信息。
原來是用戶表用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
摘要:其中定義了一些命令,還記得我們初始化項目完成后執(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)式的...
摘要:一開始的思路是先將微信小程序轉(zhuǎn)為釘釘小程序。接下來就是轉(zhuǎn)化階段,關(guān)于微信和釘釘具體可參考其開發(fā)文檔。 文章目錄 ?【浙政釘】微信-專有釘釘小程序-開發(fā)踩坑實記? ...
摘要:上傳結(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)使用它與我們的需求有各種各樣的出入。最近做上傳功能,踩了不少...
摘要:和的區(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(;); ...
閱讀 993·2021-11-15 18:06
閱讀 2362·2021-10-08 10:04
閱讀 2647·2019-08-28 18:03
閱讀 891·2019-08-26 13:42
閱讀 1913·2019-08-26 11:31
閱讀 2416·2019-08-23 17:13
閱讀 916·2019-08-23 16:45
閱讀 2049·2019-08-23 14:11