スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Spring MVC XSS対策

今回もセキュリティの一環として、XSS(クロスサイトスクリプティング)の検証と対策を行いたいと思う。

◎動作検証にあたっての各バージョンは以下の通り
  • SpringFramework 3.2.8.RELEASE
  • Java 1.7
  • Tomcat 7.0

まずは現状確認として、編集画面でJavaScriptを埋め込んで「更新」ボタンを押下してみる。

①編集画面
XSS_1.png

②「更新」ボタン押下
XSS_2.png
スクリプトが実行され、アラートが表示されてしまう。

前回のJPQLインジェクション同様、これも良くないので対策を行う。

対処方法として、「c:out」タグを使って、JavaScriptが実行されないようサニタイジング(無害化)を行ってみる。

1.result.jsp(編集完了画面)


<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://www.springframework.org/tags" prefix="spring"%>
<%@ taglib uri="http://www.springframework.org/tags/form" prefix="form"%>
<link href="<c:url value="/css/bootstrap.min.css" />" rel="stylesheet">
<link href="<c:url value="/css/bootstrap-theme.min.css" />" rel="stylesheet">
<script src="<c:url value="/js/bootstrap.min.js" />"></script>
<title>result</title>
</head>
<body>
<spring:url value="/book/edit/cover" var="varBookCoverUrl"/>
<spring:url value="/book/list/search" var="varBookEditBackUrl"/>
<spring:message code="bookId" var="varBookId"/>
<spring:message code="bookName" var="varBookName"/>
<spring:message code="price" var="varPrice"/>
<spring:message code="cover" var="varCover"/>
<spring:message code="link.edit.back" var="varLinkEditBack"/>

<div class="container-fluid">
<table class="table table-striped table-borderd">
<tr>
<td>${varBookId}</td>
<td><c:out value="${book.bookId}"/></td>
</tr>
<tr>
<td>${varBookName}</td>
<td><c:out value="${book.bookName}"/></td>
</tr>
<tr>
<td>${varPrice}</td>
<td><c:out value="${book.price}"/></td>
</tr>
<tr>
<td>${varCover}</td>
<td><img src="${varBookCoverUrl}/${book.bookId}"/></td>
</tr>
</table>
<a href="${varBookEditBackUrl}" class="btn btn-info">${varLinkEditBack}</a>
</div>
</body>
</html>

28、32、36行目が「c:out」タグを使っている箇所となる。
「c:out」タグには「escapeXml」属性があり、出力値に「<」、「>」、「&」など特殊文字が含まれていた場合、「&lt;」「&gt;」「&amp;」などにエスケープしてくれる。(デフォルトはtrue)
今回掲載しないが、検索一覧も同様に対応する。


2.動作確認
①「更新」ボタン押下
XSS_3.png

アラートが表示されることなく、更新できた。

②検索一覧
XSS_4.png


前回、今回とセキュリティ対策を施さないとどうなるか、確認することができた。


■過去のSpring関連記事
Spring関連記事 Index

スポンサーサイト

コメントの投稿

非公開コメント

プロフィール

bookmount8

Author:bookmount8
システムエンジニア。サーバーサイドでjavaを扱うことが多い。最近は、ミドルやフロント周りも関心あり。

最新記事
カテゴリ
検索フォーム
最新コメント
月別アーカイブ
これまでの訪問者数
ブロとも申請フォーム

この人とブロともになる

RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。