2017-09-21 2 views
2

私は、SolutionID(整数)に基づいて、いわゆるProductSolutionsを見つけることができるアプリケーション用のAPIを開発しています。XSS攻撃:SpringブートCRUDRepositoryで例外をスローしましたか?

コードは次のようになります

変換に失敗しました:

@Repository 
public interface ProductSolutionRepository extends CrudRepository<ProductSolution, String> { 

    public List<ProductSolution> findBySolutionId(@Param("solutionId") int solutionId); 
} 

代わりに整数の列で要求を送信する(localhost:8080/api/v1/productSolutions/search/findBySolutionId?solutionId=dangerousscript)APIは、次のメッセージでエラーを返します型[java.lang.String]から値 の場合は [@ org.springframework.data.repository.query.Param int]と入力してください。 'dangerousscript';ネストされた例外は java.lang.NumberFormatExceptionです:入力文字列の場合:「dangerousscript \」 "`

ChromeとFirefoxがきちんと入力をエスケープしている(と任意のスクリプトを実行していない)ように見えますが、

人\

これを修正する簡単な方法は、例外をスローしたときにユーザーが入力したものを削除することです、または独自のエラーページを作成することです。

+0

これはクロスサイトスクリプティングとは関係ありません。 Springが整数を期待している文字列を送信しようとしていて、例外を適切に返すだけです。それがどうしたら問題になるのか分かりません。 – g00glen00b

答えて

2

でメソッドを定義することができますクラス内のは@ControllerAdviceと注釈されています。

@RestControllerを使用していない場合)このメソッドに@ResponseBodyと注釈を付けて、直接返すか、正しいメッセージで例外を再試行することができます。

@ControllerAdvice 
public class RestExceptionControllerAdvice { 

    @ExceptionHandler(NumberFormatException.class) 
    public ErrorResponse handleSearchParseException(NumberFormatException exception) { 
     // do whathever you want 
    } 

} 
関連する問題