11package hls
22
33import (
4- "context"
5- "fmt"
6- "strings "
7- "path/filepath "
8- "time"
4+ "context"
5+ "fmt"
6+ "path/filepath "
7+ "strings "
8+ "time"
99
1010 "m7s.live/v5"
1111 "m7s.live/v5/pkg/codec"
@@ -29,26 +29,34 @@ type Recorder struct {
2929}
3030
3131var CustomFileName = func (job * m7s.RecordJob ) string {
32- if fn := job .RecConf .FileName ; fn != "" {
33- if ! strings .HasSuffix (strings .ToLower (fn ), ".ts" ) {
34- fn = fn + ".ts"
35- }
36- return filepath .Join (job .RecConf .FilePath , fn )
37- }
38- if job .RecConf .Fragment == 0 || job .RecConf .Append {
39- return fmt .Sprintf ("%s/%s.ts" , job .RecConf .FilePath , time .Now ().Format ("20060102150405" ))
40- }
41- return filepath .Join (job .RecConf .FilePath , time .Now ().Format ("20060102150405" )+ ".ts" )
32+ if fn := job .RecConf .FileName ; fn != "" {
33+ // 安全验证:清理文件名,移除路径分隔符,防止路径遍历攻击
34+ fn = filepath .Base (fn )
35+ // 验证文件名不为空且不是特殊路径
36+ if fn == "" || fn == "." || fn == ".." {
37+ // 回退到默认命名
38+ goto defaultNaming
39+ }
40+ if ! strings .HasSuffix (strings .ToLower (fn ), ".ts" ) {
41+ fn = fn + ".ts"
42+ }
43+ return filepath .Join (job .RecConf .FilePath , fn )
44+ }
45+ defaultNaming:
46+ if job .RecConf .Fragment == 0 || job .RecConf .Append {
47+ return fmt .Sprintf ("%s/%s.ts" , job .RecConf .FilePath , time .Now ().Format ("20060102150405" ))
48+ }
49+ return filepath .Join (job .RecConf .FilePath , time .Now ().Format ("20060102150405" )+ ".ts" )
4250}
4351
4452func (r * Recorder ) createStream (start time.Time ) (err error ) {
45- r .RecordJob .RecConf .Type = "ts"
46- err = r .CreateStream (start , CustomFileName )
47- if err != nil {
48- return err
49- }
50- r .Debug ("ts create file" , "filePath" , r .Event .FilePath )
51- return nil
53+ r .RecordJob .RecConf .Type = "ts"
54+ err = r .CreateStream (start , CustomFileName )
55+ if err != nil {
56+ return err
57+ }
58+ r .Debug ("ts create file" , "filePath" , r .Event .FilePath )
59+ return nil
5260}
5361
5462func (r * Recorder ) writeTailer (end time.Time ) {
0 commit comments