A. javascript獲取域名的後綴的正則表達式(頂級域名)
public string GetUrlDomainName(string url)
{
//獲取域名的正則表達式
string p = @"http://[^\.]*\.(?<domain>[^/|?]*)";
Regex reg = new Regex(p, RegexOptions.IgnoreCase);//不區分大小寫匹配
//正則表達式匹配結果
Match m = reg.Match(url);
//返回匹配結果值
return m.Groups["domain"].Value;
}
B. 正則表達式如何匹配部分出域名
這個問題用正則處理不合適
最簡單的方法就是讓一個變數X等於http://aaa.com/?id=11
然後用if語句, If (Y <>X) Then .......顯示Y之類的
C. ip,域名的正則表達式 怎麼寫
var ip=/((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d)(\.((25[0-5])|(2[0-4]\d)|(1\d\d)|([1-9]\d)|\d)){3}
/;
var domain=/[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(\.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+\.?
/;
var string=傳入值;
if(!ip.test(string)){
//TODO
}else if(!domain.test(string)){
//TODO
}
D. 正則表達式如何匹配特定的域名
如何用正則表達是匹配不含mtalk.google.com、talk.google.com、talkx.l.google.com、talk.l.google.com的其他google域名?
/^[^(mtalk)(talk)(talkx.l)(talk.l)].google.com$/g
E. java判斷輸入的字元串是否一個域名。
address.isReachable(30),這個不好使,ping得通這個函數也可能返回false
根據你的目標平台,修改"bytes from"即可
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.InetAddress;
import java.net.UnknownHostException;
/**
* PingDomain.java
*
* @author 判斷輸入的域名是否有效
*/
public class PingDomain {
public void isDomain(String addressArr) throws IOException {
boolean flag=false;
InetAddress address = null;
try {
address = InetAddress.getByName(addressArr);
System.out.println("address = " + address);
} catch (UnknownHostException e) {
System.out.println("輸入非法!");
return;
}
System.out.println("是一個域名嗎?"+isReachable(address.getHostAddress()));
System.out.println("---------------------------------------");
}
private boolean isReachable(String ip) {
Runtime r = Runtime.getRuntime();
int timeout = 2;
String pingCommand = "ping " + ip + " -w " + timeout;
BufferedReader in = null;
try {
Process p = r.exec(pingCommand);
if (p == null) {
System.out.println("Failed.");
}
in = new BufferedReader(new InputStreamReader(p.getInputStream()));
String line = null;
while ( (line = in.readLine()) != null) {
System.out.println(line);
if (line.contains("bytes from")) {
System.out.println("Conected.");
p.destroy();
return true;
}
}
} catch (Exception ex) {
System.out.println("Failed.");
} finally {
try {
in.close();
} catch (Exception ex) {
}
}
return false;
}
public static void main(String[] args) throws Exception {
PingDomain pmd = new PingDomain();
BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
String inputline=in.readLine();
pmd.isDomain(inputline);
}
}
F. Java基礎,關於流程式控制制的問題:輸入錯誤,提示錯誤並且重新輸入。 這個快把我整崩潰了,請大家幫幫我
題主的問題大體就是如何判斷用戶的輸入是否合法。這里最方便的就是使用正則表達式(Regular Expression,簡稱 Regex)。
正則表達式是一個字元串,它代表的是一定的字元串模式(比如郵箱的模式就是 "數字或字母 + @ + 數字或字母 + . + 頂級域名名稱"),當用戶輸入一個字元串時,符合這個模式的字元串會通過驗證,而不符合的則會匹配失敗。現在幾乎所有網站的郵箱密碼身份證號等的驗證都會使用正則表達式。
Java 的 String 類自帶有一個 matches 方法提供了簡單的正則表達式匹配功能,只需使用這個方法就可以完成你要求的匹配任務。代碼如下:
importjava.util.Scanner;
publicclassMyTest{
//用於匹配身份選擇和收入的正則表達式
privatefinalStringIDENTITY_REGEX="[0-2]";
privatefinalStringINCOME_REGEX="[0-9]*\.?[0-9]*";
//代表身份和收入的字元串
privateStringstatus_string;
privateStringincome_string;
//轉換為int和double後的身份和收入
privateintstatus;
privatedoubleincome;
publicvoidComputTax(){
Scannerinput=newScanner(System.in);
//一直循環直到到達break語句退出
while(true){
System.out.println("0-單身納稅人,1-已婚共同納稅人,2-已婚單獨納稅人"+
" "+"請選擇你要納稅的身份:");
//讀取用戶輸入的原始字元串並與正則表達式相匹配
status_string=input.nextLine();
//匹配失敗會返回while一開始
if(!status_string.matches(IDENTITY_REGEX)){
System.out.println("輸入錯誤,只能輸入0~2之間的數");
continue;
}
//匹配成功則會將輸入轉換為整數並退出循環
status=Integer.parseInt(status_string);
break;
}
//同理
while(true){
System.out.println("請輸入你的收入:");
income_string=input.nextLine();
if(!income_string.matches(INCOME_REGEX)){
System.out.println("收入輸入有誤,請重新輸入");
continue;
}
income=Double.parseDouble(income_string);
break;
}
//輸出相應的稅收
if(status==0){
//使用printf保留兩位小數,不然double輸出的精度太多影響可讀性
System.out.printf("你選擇的身份是單身納稅人 你應當繳納的稅收為:%.2f元 ",
income*0.1);
}elseif(status==1){
System.out.printf("你選擇的身份是已婚共同納稅人 你應當繳納的稅收為:%.2f元 ",
income*0.2);
}else{
System.out.printf("你選擇的身份是已婚單獨納稅人 你應當繳納的稅收為:%.2f元 ",
income*0.3);
}
}
publicstaticvoidmain(String[]args){
System.out.println("------------------歡迎使用納稅查詢--------------------");
MyTestmyTest=newMyTest();
myTest.ComputTax();
}
}
運行結果為:
有關正則表達式的寫法,請參考
http://deerchao.net/tutorials/regex/regex.htm
G. 正則表達式匹配域名
匹配完整域名的正則表達式:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}表達的意思如下:
一個完整的域名,由根域名、頂級域名、二級域名、三級域名……構成,每級域名之間用點分開,每級域名由字母、數字和減號構成(第一個字母不能是減號),不區分大小寫,長度不超過63。
(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?表達的意思如下:
完整的域名至少包括兩個名字(比如google.com,由google和com構成),最後可以有一個表示根域的點(在規范中,最後有一個點的才是完整域名,但一般認為包括兩個以上名字的域名也是完整域名,哪怕後面沒有點)。
H. java正則表達式怎麼表示數字
我搜藏的這些足夠你用了
1 數字:^[0-9]*$
2 n位的數字:^\d{n}$
3 至少n位的數字:^\d{n,}$
4 m-n位的數字:^\d{m,n}$
5 零和非零開頭的數字:^(0|[1-9][0-9]*)$
6 非零開頭的最多帶兩位小數的數字:^([1-9][0-9]*)+(.[0-9]{1,2})?$
7 帶1-2位小數的正數或負數:^(\-)?\d+(\.\d{1,2})?$
8 正數、負數、和小數:^(\-|\+)?\d+(\.\d+)?$
9 有兩位小數的正實數:^[0-9]+(.[0-9]{2})?$
10 有1~3位小數的正實數:^[0-9]+(.[0-9]{1,3})?$
11 非零的正整數:^[1-9]\d*$ 或 ^([1-9][0-9]*){1,3}$ 或 ^\+?[1-9][0-9]*$
12 非零的負整數:^\-[1-9][]0-9"*$ 或 ^-[1-9]\d*$
13 非負整數:^\d+$ 或 ^[1-9]\d*|0$
14 非正整數:^-[1-9]\d*|0$ 或 ^((-\d+)|(0+))$
15 非負浮點數:^\d+(\.\d+)?$ 或 ^[1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0$
16 非正浮點數:^((-\d+(\.\d+)?)|(0+(\.0+)?))$ 或 ^(-([1-9]\d*\.\d*|0\.\d*[1-9]\d*))|0?\.0+|0$
17 正浮點數:^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$ 或 ^(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*))$
18 負浮點數:^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$ 或 ^(-(([0-9]+\.[0-9]*[1-9][0-9]*)|([0-9]*[1-9][0-9]*\.[0-9]+)|([0-9]*[1-9][0-9]*)))$
19 浮點數:^(-?\d+)(\.\d+)?$ 或 ^-?([1-9]\d*\.\d*|0\.\d*[1-9]\d*|0?\.0+|0)$
二、校驗字元的表達式
1 漢字:^[\u4e00-\u9fa5]{0,}$
2 英文和數字:^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
3 長度為3-20的所有字元:^.{3,20}$
4 由26個英文字母組成的字元串:^[A-Za-z]+$
5 由26個大寫英文字母組成的字元串:^[A-Z]+$
6 由26個小寫英文字母組成的字元串:^[a-z]+$
7 由數字和26個英文字母組成的字元串:^[A-Za-z0-9]+$
8 由數字、26個英文字母或者下劃線組成的字元串:^\w+$ 或 ^\w{3,20}$
9 中文、英文、數字包括下劃線:^[\u4E00-\u9FA5A-Za-z0-9_]+$
10 中文、英文、數字但不包括下劃線等符號:^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
11 可以輸入含有^%&',;=?$\"等字元:[^%&',;=?$\x22]+
12 禁止輸入含有~的字元:[^~\x22]+
三、特殊需求表達式
1 Email地址:^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
2 域名:[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
3 InternetURL:[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
4 手機號碼:^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$
5 電話號碼("XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX):^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$
6 國內電話號碼(0511-4405222、021-87888822):\d{3}-\d{8}|\d{4}-\d{7}
7 身份證號:
15或18位身份證:^\d{15}|\d{18}$
15位身份證:^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
18位身份證:^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
8 短身份證號碼(數字、字母x結尾):^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
9 帳號是否合法(字母開頭,允許5-16位元組,允許字母數字下劃線):^[a-zA-Z][a-zA-Z0-9_]{4,15}$
10 密碼(以字母開頭,長度在6~18之間,只能包含字母、數字和下劃線):^[a-zA-Z]\w{5,17}$
11 強密碼(必須包含大小寫字母和數字的組合,不能使用特殊字元,長度在8-10之間):^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
12 日期格式:^\d{4}-\d{1,2}-\d{1,2}
13 一年的12個月(01~09和1~12):^(0?[1-9]|1[0-2])$
14 一個月的31天(01~09和1~31):^((0?[1-9])|((1|2)[0-9])|30|31)$
15 錢的輸入格式:
16 1.有四種錢的表示形式我們可以接受:"10000.00" 和 "10,000.00", 和沒有 "分" 的 "10000" 和 "10,000":^[1-9][0-9]*$
17 2.這表示任意一個不以0開頭的數字,但是,這也意味著一個字元"0"不通過,所以我們採用下面的形式:^(0|[1-9][0-9]*)$
18 3.一個0或者一個不以0開頭的數字.我們還可以允許開頭有一個負號:^(0|-?[1-9][0-9]*)$
19 4.這表示一個0或者一個可能為負的開頭不為0的數字.讓用戶以0開頭好了.把負號的也去掉,因為錢總不能是負的吧.下面我們要加的是說明可能的小數部分:^[0-9]+(.[0-9]+)?$
20 5.必須說明的是,小數點後面至少應該有1位數,所以"10."是不通過的,但是 "10" 和 "10.2" 是通過的:^[0-9]+(.[0-9]{2})?$
21 6.這樣我們規定小數點後面必須有兩位,如果你認為太苛刻了,可以這樣:^[0-9]+(.[0-9]{1,2})?$
22 7.這樣就允許用戶只寫一位小數.下面我們該考慮數字中的逗號了,我們可以這樣:^[0-9]{1,3}(,[0-9]{3})*(.[0-9]{1,2})?$
23 8.1到3個數字,後面跟著任意個 逗號+3個數字,逗號成為可選,而不是必須:^([0-9]+|[0-9]{1,3}(,[0-9]{3})*)(.[0-9]{1,2})?$
24 備註:這就是最終結果了,別忘了"+"可以用"*"替代如果你覺得空字元串也可以接受的話(奇怪,為什麼?)最後,別忘了在用函數時去掉去掉那個反斜杠,一般的錯誤都在這里
25 xml文件:^([a-zA-Z]+-?)+[a-zA-Z0-9]+\\.[x|X][m|M][l|L]$
26 中文字元的正則表達式:[\u4e00-\u9fa5]
27 雙位元組字元:[^\x00-\xff] (包括漢字在內,可以用來計算字元串的長度(一個雙位元組字元長度計2,ASCII字元計1))
28 空白行的正則表達式:\n\s*\r (可以用來刪除空白行)
29 HTML標記的正則表達式:<(\S*?)[^>]*>.*?</\1>|<.*? /> (網上流傳的版本太糟糕,上面這個也僅僅能部分,對於復雜的嵌套標記依舊無能為力)
30 首尾空白字元的正則表達式:^\s*|\s*$或(^\s*)|(\s*$) (可以用來刪除行首行尾的空白字元(包括空格、製表符、換頁符等等),非常有用的表達式)
31 騰訊QQ號:[1-9][0-9]{4,} (騰訊QQ號從10000開始)
32 中國郵政編碼:[1-9]\d{5}(?!\d) (中國郵政編碼為6位數字)
33 IP地址:\d+\.\d+\.\d+\.\d+ (提取IP地址時有用)
I. java正則表達式怎麼防止代碼漏洞
javaWeb安全漏洞及處理方式
關注
轉載自:https://blog.csdn.net/lujiancs/article/details/78175007
1、SQL注入攻擊
SQL注入攻擊就是通過把SQL命令插入到Web表單提交或輸入域名或頁面請求的查詢字元串,最終達到欺騙伺服器執行惡意的SQL命令。具體來說,它是利用現有應用程序,將(惡意)的SQL命令注入到後台資料庫引擎執行的能力,它可以通過在Web表單中輸入(惡意)SQL語句得到一個存在安全漏洞的網站上的資料庫,而不是按照設計者意圖去執行SQL語句。
隨著B/S框架結構在系統開發中的廣泛應用,惡意攻擊者利用SQL命令在Web表單中輸入合法的字元或查詢字元串來欺騙伺服器執行SQL命令。當注入攻擊得逞後,Web程序將泄露大量用戶隱私數據和資料庫中數據結構。攻擊者能夠獲得系統較高的訪問許可權,進行破壞操作。
SQL注入可以分為平台層注入和代碼層注入。前者由不安全的資料庫配置或資料庫平台的漏洞所致;後者主要是由於程序員對輸入未進行細致地過濾,從而執行了非法的數據查詢。基於此,SQL注入的產生原因通常表現在以下幾方面:
1)不當的類型處理;
2)不安全的資料庫配置;
3)不合理的查詢集處理;
4)不當的錯誤處理;
5)轉義字元處理不合適;
6) 多個提交處理不當。
解決方法:
資料庫安全通信包括SQL注入攻擊的防範、安全設置、異常信息處理三個方面。
1.服務端Filter對訪問者輸入的字元進行過濾檢驗,但是攻擊者經常把危險字元潛藏在用戶輸入的有效字元中完 成過濾檢驗。
2.通過正則表達式對頁面的文本框輸入的數據進行限制可以減少過濾檢驗存在的漏洞。
3.使用prepareStatment預編譯sql語句
2、XSS跨站腳本攻擊
跨站腳本(Cross-site scripting,簡稱XSS),是一種迫使Web站點回顯可執行代碼的攻擊技術,而這些可執行代碼由攻擊者提供、最終為用戶瀏覽器載入。不同於大多數攻擊(一般只涉及攻擊者和受害者),XSS涉及到三方,即攻擊者、客戶端與網站。XSS的攻擊目標是為了盜取客戶端的cookie或者其他網站用於識別客戶端身份的敏感信息。獲取到合法用戶的信息後,攻擊者甚至可以假冒最終用戶與網站進行交互。
XSS 屬於被動式的攻擊。攻擊者先構造一個跨站頁面,利用SCRIPT、<IMG>、<IFRAME>等各種方式使得用戶瀏覽這個頁面時,觸發對被攻擊站點的HTTP 請求。此時,如果被攻擊者如果已經在被攻擊站點登錄,就會持有該站點cookie。這樣該站點會認為被攻擊者發起了一個HTTP請求。而實際上這個請求是在被攻擊者不知情情況下發起的,由此攻擊者在一定程度上達到了冒充被攻擊者的目的。精心的構造這個攻擊請求,可以達到冒充發文,奪取許可權等多個攻擊目的。在常見的攻擊實例中,這個請求是通過script 來發起的,因此被稱為Cross Site Script。
XSS漏洞成因是由於動態網頁的Web應用對用戶提交請求參數未做充分的檢查過濾,允許用戶在提交的數據中摻入HTML代碼(最主要的是「>」、「<」),然後未加編碼地輸出到第三方用戶的瀏覽器,這些攻擊者惡意提交代碼會被受害用戶的瀏覽器解釋執行。
分為三種類型:
1)反射型(數據流向:瀏覽器 ->後端 -> 瀏覽器)
反射型XSS腳本攻擊即如我們上面所提到的XSS跨站腳本攻擊方式,該類型只是簡單地將用戶輸入的數據直接或未經過完善的安全過濾就在瀏覽器中進行輸出,導致輸出的數據中存在可被瀏覽器執行的代碼數據。由於此種類型的跨站代碼存在於URL中,所以黑客通常需要通過誘騙或加密變形等方式,將存在惡意代碼的鏈接發給用戶,只有用戶點擊以後才能使得攻擊成功實施。
2)存儲型(數據流向是:瀏覽器 ->後端 -> 資料庫 -> 後端-> 瀏覽器)
存儲型XSS腳本攻擊是指Web應用程序會將用戶輸入的數據信息保存在服務端的資料庫或其他文件形式中,網頁進行數據查詢展示時,會從資料庫中獲取數據內容,並將數據內容在網頁中進行輸出展示,因此存儲型XSS具有較強的穩定性。
存儲型XSS腳本攻擊最為常見的場景就是在博客或新聞發布系統中,黑客將包含有惡意代碼的數據信息直接寫入文章或文章評論中,所有瀏覽文章或評論的用戶,都會在他們客戶端瀏覽器環境中執行插入的惡意代碼。
3)基於DOM(數據流向是:URL-->瀏覽器 )
基於DOM的XSS跨站腳本攻擊是通過修改頁面DOM節點數據信息而形成的XSS跨站腳本攻擊。不同於反射型XSS和存儲型XSS,基於DOM的XSS跨站腳本攻擊往往需要針對具體的javascript DOM代碼進行分析,並根據實際情況進行XSS跨站腳本攻擊的利用。
解決方法:
1).輸入過濾。對用戶的所有輸入數據進行檢測,比如過濾其中的「<」、「>」、「/」等可能導致腳本注入的特殊字元,或者過濾「script」、「javascript」等腳本關鍵字,或者對輸入數據的長度進行限制等等。同時,我們也要考慮用戶可能繞開ASCII碼,使用十六進制編碼來輸入腳本。因此,對用戶輸入的十六進制編碼,我們也要進行相應的過濾。只要能夠嚴格檢測每一處交互點,保證對所有用戶可能的輸入都進行檢測和XSS過濾,就能夠有效地阻止XSS攻擊。
2).輸出編碼。通過前面對XSS攻擊的分析,我們可以看到,之所以會產生XSS攻擊,就是因為Web應用程序將用戶的輸入直接嵌入到某個頁面當中,作為該頁面的HTML代碼的一部分。因此,當Web應用程序將用戶的輸入數據輸出到目標頁面中時,只要用HtmlEncoder等工具先對這些數據進行編碼,然後再輸出到目標頁面中。這樣,如果用戶輸入一些HTML的腳本,也會被當成普通的文字,而不會成為目標頁面HTML代碼的一部分得到執行.
3、CSRF跨站請求偽造漏洞防護
CSRF是CrossSite Request Forgery的縮寫,乍一看和XSS差不多的樣子,但是其原理正好相反,XSS是利用合法用戶獲取其信息,而CSRF是偽造成合法用戶發起請求。
字面理解意思就是在別的站點偽造了一個請求。專業術語來說就是在受害者訪問一個網站時,其 Cookie 還沒有過期的情況下,攻擊者偽造一個鏈接地址發送受害者並欺騙讓其點擊,從而形成 CSRF 攻擊。
根據HTTP協議,在HTTP頭中有一個欄位叫Referer,它記錄了該HTTP請求的來源地址。在通常情況下,訪問一個安全受限頁面的請求必須來自於同一個網站。
解決方案:
配置FILTER攔截用戶所有請求(POST/GET),對用戶請求Referer頭URL進行合法性校驗。
4、URL鏈接注入漏洞防護
鏈接注入是修改站點內容的行為,其方式為將外部站點的 URL 嵌入其中,或將有易受攻擊的站點中的腳本 的 URL 嵌入其中。將URL 嵌入易受攻擊的站點中,攻擊者便能夠以它為平台來啟動對其他站點的攻擊,以及攻擊這個易受攻擊的站點本身。
解決方案:
1,二次驗證,進行重要敏感操作時,要求用戶進行二次驗證。
2,驗證碼,進行重要敏感操作時,加入驗證碼。
3,驗證 HTTP 的 Referer 欄位。
4,請求地址中添加 Token 並驗證。
5,HTTP 頭中自定義屬性並驗證。
5、會話COOKIE中缺少HttpOnly防護
會話cookie中缺少HttpOnly屬性會導致攻擊者可以通過程序(JS腳本、Applet等)獲取到用戶的cookie信息,造成用戶cookie信息泄露,增加攻擊者的跨站腳本攻擊威脅。
HttpOnly是微軟對cookie做的擴展,該值指定cookie是否可通過客戶端腳本訪問。Microsoft Internet Explorer 版本 6 Service Pack 1 和更高版本支持cookie屬性HttpOnly。
如果在Cookie中沒有設置HttpOnly屬性為true,可能導致Cookie被竊取。竊取的Cookie可以包含標識站點用戶的敏感信息。
如果在Cookie中設置HttpOnly屬性為true,兼容瀏覽器接收到HttpOnly cookie,那麼客戶端通過程序(JS腳本、Applet等)將無法讀取到Cookie信息,這將有助於緩解跨站點腳本威脅。
解決方案:
配置filter攔截器,將伺服器端返回請求,向所有會話cookie中添加「HttpOnly」屬性。
示例代碼:
HttpServletResponseresponse=(HttpServletResponse)paramServletResponse;
response.setHeader("SET-COOKIE","JSESSIONID=" + sessionid + "; HttpOnly");
6、點擊劫持漏洞(Clickjacking)防護
點擊劫持是一種視覺上的欺騙手段,攻擊者使用一個透明的、不可見的iframe,覆蓋在一個網頁上,然後誘使用戶在該網頁上進行操作,此時用戶在不知情的情況下點擊了透明的iframe頁面。通過調整iframe頁面的位置,可以誘使用戶恰好點擊在iframe頁面的一些功能性按鈕上。
解決方案:
配置FILTER攔截器,在伺服器端返回請求中,使用一個HTTP頭「X-Frame-Options」值為SAMEORIGIN-同源策略 ,則frame頁面的地址只能為同源域名下面的頁面,防止點擊劫持漏洞發生。
示例代碼:
HttpServletResponseresponse=(HttpServletResponse)paramServletResponse;
response.addHeader("x-frame-options","SAMEORIGIN");
7、HTTP host 頭攻擊漏洞
使用HTTP代理工具,可以篡改HTTP報文頭部中HOST欄位時,該值可被注入惡意代碼。因為需要控制客戶端的輸入,故該漏洞較難利用。
解決方案:
配置FILTER攔截器,對請求輸入HOST頭信息進行信息安全性校驗,防止HOST頭信息被惡意篡改利用。
示例代碼:
HttpServletRequest request =(HttpServletRequest)servletRequest;
//主機ip和埠 或 域名和埠
String myhosts = request.getHeader("host");
if(!StringUtils.equals(myhosts, "xx.xx.xxx.xxx:xxxx")
!StringUtils.equals(myhosts, "xx.xx.xxx.xxx:xxxx")
!StringUtils.equals(myhosts,"xx.xx.xxx.xxx:xxxx")StringUtils.equals(myhosts,"xx.xx.xxx.xxx")
!StringUtils.equals(myhosts,"xx.xx.xxx.xxx") !StringUtils.equals(myhosts,"xx.xx.xxx.xxx" ){
logger.error("======訪問host非法,已攔截======");
response.sendRedirect(request.getContextPath() + "/login.jsp");
return;
}
8、越權訪問漏洞防護
越權訪問(Broken Access Control,簡稱BAC)是Web應用程序中一種常見的漏洞,分為垂直越權訪問和水平越權訪問。垂直越權是指不同用戶級別之間的越權,如普通用戶執行管理員用戶的許可權。水平越權是指相同級別用戶之間的越權操作。
Web應用程序如果存在越權訪問漏洞,可能導致以下危害:
1)導致任意用戶敏感信息泄露;
2)導致任意用戶信息被惡意修改或刪除。
解決方案:
配置FILTER攔截器,對請求所有URL進行攔截,對於需要進行授權的URL進行許可權校驗,防止用戶越權訪問系統資源。
9.弱口令漏洞
解決方案:最好使用至少6位的數字、字母及特殊字元組合作為密碼。資料庫不要存儲明文密碼,應存儲MD5加密後的密文,由於目前普通的MD5加密已經可以被破解,最好可以多重MD5加密,或者多種加密方式疊加組合。
10.JSP頁面拋出的異常可能暴露程序信息。
有經驗的入侵者,可以從JSP程序的異常中獲取很多信息,比如程序的部分架構、程序的物理路徑、SQL注入爆出來的信息等。
解決方案:自定義一個Exception,將異常信息包裝起來不要拋到頁面上。
11.本地緩存漏洞
合法用戶「注銷」後,在未關閉瀏覽器的情況下,點擊瀏覽器「後退」按鈕,可從本地頁面緩存中讀取數據,繞過了服務端filter過濾。
解決方案:配置filter對存放敏感信息的頁面限制頁面緩存。如:
httpResponse.setHeader("Cache-Control","no-cache");
httpResponse.setHeader("Cache-Control","no-store");
httpResponse.setDateHeader("Expires",0);
httpResponse.setHeader("Pragma","no-cache");
12.文件上傳漏洞。
前台僅使用JS對文件後綴做了過濾,這只能針對普通的用戶,而惡意攻擊者完全可以修改表單去掉JS校驗。
13.Java WEB容器默認配置漏洞。
如TOMCAT後台管理漏洞,默認用戶名及密碼登錄後可直接上傳war文件獲取webshell。
解決方案:最好刪除,如需要使用它來管理維護,可更改其默認路徑,口令及密碼。
J. java如何提取url里的域名
方法1:正則
(http://)或者(https://)開頭
往後面匹配三個點,
不會的話網路一波。
然後把最後的點去掉
就可以得到域名
方法2:
將URL字元串轉換為charArray
遍歷 對.(點)的次數進行記數
第三次當前返回下標
用SubString切割字元串獲取域名