回覆列表
  • 1 # 使用者4943389245586

    防止跨站點指令碼攻擊的解決方法:

    1.輸入過濾

    對每一個使用者的輸入或者請求首部,都要進行過濾。這需要程式設計師有良好的安全素養,而且需要覆蓋到所有的輸入源。而且還不能夠阻止其他的一些問題,如錯誤頁等。

    final String filterPattern="[{}\\[\\];\\&]";

    String inputStr = s.replaceAll(filterPattern," ");

    2.輸出過濾

    public static String encode(String data)

    {

    final StringBuffer buf = new StringBuffer();

    final char[] chars = data.toCharArray();

    for (int i = 0; i

    {

    buf.append("" + (int) chars[i]);

    }

    return buf.toString();

    }

    public static String decodeHex(final String data,

    final String charEncoding)

    {

    if (data == null)

    {

    return null;

    }

    byte[] inBytes = null;

    try

    {

    inBytes = data.getBytes(charEncoding);

    }

    catch (UnsupportedEncodingException e)

    {

    //use default charset

    inBytes = data.getBytes();

    }

    byte[] outBytes = new byte[inBytes.length];

    int b1;

    int b2;

    int j=0;

    for (int i = 0; i

    {

    if (inBytes[i] == "%")

    {

    b1 = Character.digit((char) inBytes[++i], 16);

    b2 = Character.digit((char) inBytes[++i], 16);

    outBytes[j++] = (byte) (((b1 & 0xf)

    (b2 & 0xf));

    }

    else

    {

    outBytes[j++] = inBytes[i];

    }

    }

    String encodedStr = null;

    try

    {

    encodedStr = new String(outBytes, 0, j, charEncoding);

    }

    catch (UnsupportedEncodingException e)

    {

    encodedStr = new String(outBytes, 0, j);

    }

    return encodedStr;

    }

    任何的非servlet例外都被/errPageGeneric路徑捕捉,這樣就可以處理。

    Throwable throwable = (Throwable)

    request.getAttribute("javax.servlet.error.exception");

    String status_code = ((Integer)

    request.getAttribute("javax.servlet.error.status_code")).toString( );

    3.安裝三方的應用防火牆,可以攔截css攻擊。

    附:

    跨站指令碼不像其他攻擊只包含兩個部分:攻擊者和web站點。

    跨站指令碼包含三個部分:攻擊者,客戶和web站點。

    跨站指令碼攻擊的目的是竊取客戶的cookies,或者其他可以證明使用者身份的敏感資訊。

    攻擊

    一個get請求

    GET /welcome.cgi?name=Joe%20Hacker HTTP/1.0

    Host:

    www.vulnerable.site

    會產生如下的結果

    Hi Joe Hacker

    Welcome to our system

    ...

    但是如果請求被篡改

    GET /welcome.cgi?name= HTTP/1.0

    Host: www.vulnerable.site

    就會得到如下的響應

    Hi

    Welcome to our system

    ...

    這樣在客戶端會有一段非法的指令碼執行,這不具有破壞作用,但是如下的指令碼就很危險了。

    http://www.vulnerable.site/welcome.cgi?name=

    響應如下:

    Hi

    Welcome to our system

    ...

    瀏覽器回執行該指令碼並將客戶的cookie發到一個攻擊者的網站,這樣攻擊者就得到了客戶的cookie。

  • 中秋節和大豐收的關聯?
  • C羅有沒有希望打破比斯坎的805球,成為真正的歷史第一人?