管理システムのv4.5.1がリリースされている場合、更新ログは次のとおりです。
- 任意のファイルダウンロードの脆弱性を防止します
- 許可バイパスの脆弱性を防ぐために、shiroを最新バージョン1.7.0にアップグレードします
- druidを最新バージョンv1.2.2にアップグレードします
- 新しいテーブル行トリガーイベント(onCheck、onUncheck、onCheckAll、onUncheckAll)
- 複数のタブで現在以外のオプションを閉じるときの空白の問題を修正します
- コード生成プレビューは強調表示をサポートします
- MapperLocations構成はセパレーターをサポートします
- 許可情報の調整
- プロフィール写真のデフォルトの写真を追加し、写真をアップロードします
- グローバル構成クラスは他のアプリケーションと同じままです
- 任意のファイルダウンロードの脆弱性
RuoYi <= v4.5.0
ファイルダウンロードの脆弱性。通常の使用法は、スクリプトコード、サーバー構成、システム構成などのサーバーファイルをダウンロードすることです。../
レイヤーごとにパスを推測するために使用できます。
ビジネスニーズにより、Webサイトはファイル表示またはファイルダウンロード機能を提供する必要があることがよくありますが、ユーザーが表示またはダウンロードできるファイルに制限がない場合、悪意のあるユーザーは機密ファイルを表示またはダウンロードできます。これはファイル表示およびダウンロードの脆弱性です。
脆弱性の検出:CommonController.java
、重要な情報がダウンロードされないようにこのメソッドを変更する必要がない場合、ファイルをダウンロードできるかどうかを確認するため/common/download/resource
のインターフェイスが含まれcheckAllowDownload
ています。
解決策:アップグレードRuoYi
のバージョン >=4.5.1
、任意のファイルのダウンロードを防ぐために、または再追加ファイルのダウンロード確認を。
/**
* 本地资源通用下载
*/
@GetMapping("/common/download/resource")
public void resourceDownload(String resource, HttpServletRequest request, HttpServletResponse response)
throws Exception
{
try
{
if (!FileUtils.checkAllowDownload(resource))
{
throw new Exception(StringUtils.format("资源文件({})非法,不允许下载。 ", resource));
}
// 本地资源路径
String localPath = Global.getProfile();
// 数据库资源地址
String downloadPath = localPath + StringUtils.substringAfter(resource, Constants.RESOURCE_PREFIX);
// 下载名称
String downloadName = StringUtils.substringAfterLast(downloadPath, "/");
response.setContentType(MediaType.APPLICATION_OCTET_STREAM_VALUE);
FileUtils.setAttachmentResponseHeader(response, downloadName);
FileUtils.writeBytes(downloadPath, response.getOutputStream());
}
catch (Exception e)
{
log.error("下载文件失败", e);
}
}
/**
* 检查文件是否可下载
*
* @param resource 需要下载的文件
* @return true 正常 false 非法
*/
public static boolean checkAllowDownload(String resource)
{
// 禁止目录上跳级别
if (StringUtils.contains(resource, ".."))
{
return false;
}
// 检查允许下载的文件规则
if (ArrayUtils.contains(MimeTypeUtils.DEFAULT_ALLOWED_EXTENSION, FileTypeUtils.getFileType(resource)))
{
return true;
}
// 不在允许下载的文件规则
return false;
}
内蔵機能
1.ユーザー管理:ユーザーはシステムオペレーターであり、この機能は主にシステムユーザーの構成を完了します。
2.部門管理:システム組織(会社、部門、グループ)を構成し、ツリー構造にサポート権限を表示します。
3.位置管理:システムユーザーの位置を構成します。
4.メニュー管理:システムメニュー、操作権限、ボタン権限の識別などを構成します。
5.役割管理:役割メニューのアクセス許可の割り当てと役割の設定は、組織ごとにデータスコープのアクセス許可に分けられます。
6.辞書管理:システムで頻繁に使用される比較的固定されたデータを維持します。
7.パラメータ管理:システムの共通パラメータを動的に構成します。
8.通知のアナウンス:システムは、情報のリリースとメンテナンスのアナウンスを通知します。
9.操作ログ:システムの正常な操作ログの記録とクエリ、システムの異常情報ログの記録とクエリ。
10.ログインログ:システムログインログレコードクエリには、ログイン例外が含まれています。
11.オンラインユーザー:現在のシステムのアクティブユーザーのステータスを監視します。
12.時限タスク:オンライン(追加、変更、削除)タスクスケジューリングには、実行結果ログが含まれます。
13.コード生成:フロントエンドおよびバックエンドのコード生成(java、html、xml、sql)はCRUDダウンロードをサポートします。
14.システムインターフェイス:ビジネスコードに従って、関連するapiインターフェイスドキュメントを自動的に生成します。
15.サービスの監視:現在のシステムのCPU、メモリ、ディスク、スタック、およびその他の関連情報を監視します。
16.オンラインビルダー:フォーム要素をドラッグして、対応するHTMLコードを生成します。
17.接続プールの監視:現在のシステムデータベース接続プールのステータスを監視し、SQLを分析してシステムパフォーマンスのボトルネックを見つけます。