mm_os 3.3.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (380) hide show
  1. package/LICENSE +21 -201
  2. package/README.md +491 -99
  3. package/README_EN.md +498 -0
  4. package/adapter/adapter.js +431 -0
  5. package/adapter/custom_persistence.js +660 -0
  6. package/adapter/mqtt.js +273 -0
  7. package/adapter/socket.js +113 -0
  8. package/adapter/web.js +67 -0
  9. package/adapter/websocket.js +146 -0
  10. package/com/api/com.json +5 -0
  11. package/{core/com → com}/api/config.tpl.json +8 -8
  12. package/com/api/drive.js +708 -0
  13. package/com/api/index.js +198 -0
  14. package/com/api/oauth.js +200 -0
  15. package/com/api/script.tpl.js +32 -0
  16. package/com/cmd/README.md +11 -0
  17. package/com/cmd/com.json +5 -0
  18. package/com/cmd/config.tpl.json +122 -0
  19. package/com/cmd/drive.js +1548 -0
  20. package/com/cmd/index.js +1066 -0
  21. package/com/cmd/msg.json +48 -0
  22. package/com/cmd/nlp.js +525 -0
  23. package/com/cmd/script.tpl.js +32 -0
  24. package/com/db/com.json +5 -0
  25. package/com/db/drive.js +1999 -0
  26. package/com/db/index.js +242 -0
  27. package/com/event/com.json +5 -0
  28. package/{core/com → com}/event/config.tpl.json +8 -8
  29. package/com/event/drive.js +59 -0
  30. package/com/event/index.js +409 -0
  31. package/com/event/script.tpl.js +23 -0
  32. package/com/mqtt/com.json +5 -0
  33. package/{core/com → com}/mqtt/config.tpl.json +3 -5
  34. package/com/mqtt/drive.js +676 -0
  35. package/com/mqtt/index.js +822 -0
  36. package/com/mqtt/mm_mqtt.js +425 -0
  37. package/com/mqtt/script.tpl.js +723 -0
  38. package/com/nav/com.json +5 -0
  39. package/com/nav/config.tpl.json +84 -0
  40. package/com/nav/drive.js +702 -0
  41. package/com/nav/index.js +231 -0
  42. package/{core/com → com}/nav/tpl/admin_pc/page_config.vue +280 -280
  43. package/{core/com → com}/nav/tpl/admin_pc/page_config_form.vue +194 -194
  44. package/com/nav/tpl/admin_pc/page_form.vue +180 -0
  45. package/com/nav/tpl/admin_pc/page_view.vue +124 -0
  46. package/com/nav/tpl/dev_pc/page_default.vue +247 -0
  47. package/com/nav/tpl/dev_pc/page_type.vue +313 -0
  48. package/com/nav/tpl/home_pc/page_default.vue +234 -0
  49. package/com/nav/tpl/home_pc/page_form.vue +137 -0
  50. package/com/nav/tpl/home_pc/page_list.vue +234 -0
  51. package/com/nav/tpl/home_pc/page_nav.vue +221 -0
  52. package/com/nav/tpl/home_pc/page_type.vue +234 -0
  53. package/com/nav/tpl/home_pc/page_view.vue +125 -0
  54. package/com/nav/tpl/home_phone/page_channel.vue +234 -0
  55. package/com/nav/tpl/home_phone/page_default.vue +234 -0
  56. package/com/nav/tpl/home_phone/page_form.vue +137 -0
  57. package/com/nav/tpl/home_phone/page_nav.vue +237 -0
  58. package/com/nav/tpl/home_phone/page_type.vue +234 -0
  59. package/com/nav/tpl/home_phone/page_view.vue +125 -0
  60. package/com/nav/viewmodel.js +446 -0
  61. package/com/param/com.json +5 -0
  62. package/{core/com → com}/param/config.tpl.json +7 -1
  63. package/com/param/drive.js +502 -0
  64. package/com/param/index.js +155 -0
  65. package/com/param/script.tpl.js +12 -0
  66. package/com/pendant/com.json +5 -0
  67. package/{core/com/component → com/pendant}/config.tpl.json +15 -13
  68. package/com/pendant/drive.js +204 -0
  69. package/com/pendant/index.js +441 -0
  70. package/com/pendant/pendant.html +16 -0
  71. package/com/pendant/script.tpl.js +18 -0
  72. package/com/socket/com.json +5 -0
  73. package/com/socket/config.tpl.json +12 -0
  74. package/com/socket/drive.js +651 -0
  75. package/com/socket/index.js +351 -0
  76. package/com/socket/script.tpl.js +41 -0
  77. package/com/sql/com.json +5 -0
  78. package/{core/com → com}/sql/config.tpl.json +13 -9
  79. package/com/sql/drive.js +1259 -0
  80. package/com/sql/index.js +150 -0
  81. package/com/sql/script.tpl.js +47 -0
  82. package/com/static/com.json +5 -0
  83. package/{core/com → com}/static/config.tpl.json +10 -6
  84. package/com/static/drive.js +194 -0
  85. package/com/static/index.js +226 -0
  86. package/com/static/script.tpl.js +28 -0
  87. package/com/task/com.json +5 -0
  88. package/{core/com → com}/task/config.tpl.json +4 -6
  89. package/com/task/drive.js +405 -0
  90. package/com/task/index.js +148 -0
  91. package/com/task/script.tpl.js +37 -0
  92. package/com/template/com.json +5 -0
  93. package/com/template/config.tpl.json +16 -0
  94. package/com/template/drive.js +80 -0
  95. package/com/template/index.js +141 -0
  96. package/com.js +156 -0
  97. package/common/README.md +2 -0
  98. package/common/handler/msg/handler.json +22 -0
  99. package/common/handler/msg/index.js +23 -0
  100. package/common/handler/player/handler.json +22 -0
  101. package/common/handler/player/index.js +287 -0
  102. package/common/handler/user/handler.json +22 -0
  103. package/common/handler/user/index.js +23 -0
  104. package/common/middleware/web_after/index.js +29 -0
  105. package/common/middleware/web_after/middleware.json +9 -0
  106. package/common/middleware/web_base/index.js +113 -0
  107. package/common/middleware/web_base/middleware.json +19 -0
  108. package/common/middleware/web_before/index.js +33 -0
  109. package/common/middleware/web_before/middleware.json +9 -0
  110. package/common/middleware/web_cors/index.js +87 -0
  111. package/common/middleware/web_cors/middleware.json +24 -0
  112. package/common/middleware/web_error/index.js +119 -0
  113. package/common/middleware/web_error/middleware.json +18 -0
  114. package/common/middleware/web_ip/index.js +15 -0
  115. package/common/middleware/web_ip/middleware.json +14 -0
  116. package/common/middleware/web_logger/index.js +156 -0
  117. package/common/middleware/web_logger/middleware.json +14 -0
  118. package/common/middleware/web_main/index.js +24 -0
  119. package/common/middleware/web_main/middleware.json +9 -0
  120. package/common/middleware/web_static/index.js +73 -0
  121. package/common/middleware/web_static/middleware.json +54 -0
  122. package/common/middleware/web_waf/index.js +385 -0
  123. package/common/middleware/web_waf/middleware.json +13 -0
  124. package/common/model/msg/index.js +88 -0
  125. package/common/model/msg/model.json +401 -0
  126. package/common/model/player/index.js +63 -0
  127. package/common/model/player/model.json +185 -0
  128. package/common/model/user/index.js +11 -0
  129. package/common/model/user/model.json +219 -0
  130. package/core/app/config.tpl.json +67 -0
  131. package/core/app/index.js +632 -0
  132. package/core/app/script.tpl.js +52 -0
  133. package/core/channel/index.js +899 -0
  134. package/core/channel/matcher.js +585 -0
  135. package/core/com/config.tpl.json +16 -0
  136. package/core/com/index.js +74 -0
  137. package/core/com/script.tpl.js +5 -0
  138. package/core/component/component.js +42 -0
  139. package/core/component/config.tpl.json +63 -0
  140. package/core/component/index.js +273 -0
  141. package/core/component/script.tpl.js +19 -0
  142. package/core/controller/config.tpl.json +14 -0
  143. package/core/controller/index.js +373 -0
  144. package/core/controller/script.tpl.js +27 -0
  145. package/core/factory/config.tpl.json +14 -0
  146. package/core/factory/entity.js +275 -0
  147. package/core/factory/index.js +241 -0
  148. package/core/factory/script.tpl.js +16 -0
  149. package/core/game/bat/index.js +137 -0
  150. package/core/game/bat/world.js +622 -0
  151. package/core/game/config.tpl.json +16 -0
  152. package/core/game/entity_admin.js +230 -0
  153. package/core/game/index.js +186 -0
  154. package/core/handler/config.tpl.json +22 -0
  155. package/core/handler/index.js +181 -0
  156. package/core/handler/script.tpl.js +23 -0
  157. package/core/logic/config.tpl.json +14 -0
  158. package/core/logic/index.js +59 -0
  159. package/core/logic/script.tpl.js +19 -0
  160. package/core/middleware/config.tpl.json +16 -0
  161. package/core/middleware/index.js +125 -0
  162. package/core/middleware/script.tpl.js +37 -0
  163. package/core/mod/config.tpl.json +22 -0
  164. package/core/mod/index.js +130 -0
  165. package/core/mod/script.tpl.js +34 -0
  166. package/core/model/config.tpl.json +219 -0
  167. package/core/model/index.js +272 -0
  168. package/core/model/model.js +27 -0
  169. package/core/model/script.tpl.js +20 -0
  170. package/core/notifier/config.tpl.json +14 -0
  171. package/core/notifier/index.js +77 -0
  172. package/core/notifier/script.tpl.js +20 -0
  173. package/core/plugin/config.tpl.json +24 -0
  174. package/core/plugin/index.js +232 -0
  175. package/core/plugin/script.tpl.js +51 -0
  176. package/core/pusher/config.tpl.json +14 -0
  177. package/core/pusher/index.js +161 -0
  178. package/core/pusher/script.tpl.js +20 -0
  179. package/core/room/bat/index.js +170 -0
  180. package/core/room/bat/room.js +524 -0
  181. package/core/room/config.tpl.json +20 -0
  182. package/core/room/index.js +249 -0
  183. package/core/room/room.js +61 -0
  184. package/core/scene/config.tpl.json +14 -0
  185. package/core/scene/index.js +466 -0
  186. package/core/scene/loop.js +1255 -0
  187. package/core/scene/map.js +28 -0
  188. package/core/scene/script.tpl.js +22 -0
  189. package/core/sender/config.tpl.json +14 -0
  190. package/core/sender/index.js +79 -0
  191. package/core/sender/script.tpl.js +20 -0
  192. package/core/service/config.tpl.json +14 -0
  193. package/core/service/index.js +100 -0
  194. package/core/service/script.tpl.js +25 -0
  195. package/core/store/config.tpl.json +26 -0
  196. package/core/store/index.js +1755 -0
  197. package/core/store/script.tpl.js +22 -0
  198. package/core/store/sql.js +1464 -0
  199. package/core/system/config.tpl.json +18 -0
  200. package/core/system/index.js +312 -0
  201. package/core/system/script.tpl.js +77 -0
  202. package/core/view/config.tpl.json +14 -0
  203. package/core/view/index.js +91 -0
  204. package/core/view/script.tpl.js +20 -0
  205. package/core/zone/bat/index.js +725 -0
  206. package/core/zone/config.tpl.json +54 -0
  207. package/core/zone/index.js +614 -0
  208. package/core/zone/script.tpl.js +10 -0
  209. package/core/zone/zone_bat.js +136 -0
  210. package/core//345/237/272/347/261/273/346/250/241/345/235/227/346/270/205/345/215/225.md +24 -0
  211. package/index.js +17 -314
  212. package/os.js +57 -0
  213. package/package.json +60 -58
  214. package/server.js +598 -0
  215. package/README.en.md +0 -36
  216. package/conf.json +0 -3
  217. package/core/base/mqtt/index.js +0 -1107
  218. package/core/base/mqtt/lib.js +0 -40
  219. package/core/base/web/index.js +0 -243
  220. package/core/com/api/com.json +0 -4
  221. package/core/com/api/drive.js +0 -668
  222. package/core/com/api/index.js +0 -108
  223. package/core/com/api/oauth.js +0 -158
  224. package/core/com/api/script.js +0 -32
  225. package/core/com/app/README.md +0 -3
  226. package/core/com/app/com.json +0 -4
  227. package/core/com/app/config.tpl.json +0 -16
  228. package/core/com/app/drive.js +0 -309
  229. package/core/com/app/index.js +0 -211
  230. package/core/com/app/script.js +0 -155
  231. package/core/com/cmd/com.json +0 -4
  232. package/core/com/cmd/config.tpl.json +0 -66
  233. package/core/com/cmd/drive.js +0 -513
  234. package/core/com/cmd/index.js +0 -354
  235. package/core/com/cmd/old/5w2h.js +0 -54
  236. package/core/com/cmd/old/drive.js +0 -423
  237. package/core/com/cmd/script.js +0 -11
  238. package/core/com/component/README.md +0 -3
  239. package/core/com/component/com.json +0 -4
  240. package/core/com/component/component.html +0 -16
  241. package/core/com/component/drive.js +0 -197
  242. package/core/com/component/index.js +0 -312
  243. package/core/com/component/script.js +0 -18
  244. package/core/com/db/com.json +0 -4
  245. package/core/com/db/drive.js +0 -1160
  246. package/core/com/db/index.js +0 -176
  247. package/core/com/event/com.json +0 -4
  248. package/core/com/event/drive.js +0 -133
  249. package/core/com/event/index.js +0 -345
  250. package/core/com/event/script.js +0 -26
  251. package/core/com/eventer/com.js +0 -477
  252. package/core/com/eventer/com.json +0 -4
  253. package/core/com/middleware/com.js +0 -153
  254. package/core/com/middleware/com.json +0 -4
  255. package/core/com/middleware/config.tpl.json +0 -8
  256. package/core/com/middleware/script.js +0 -9
  257. package/core/com/mqtt/com.json +0 -4
  258. package/core/com/mqtt/drive.js +0 -600
  259. package/core/com/mqtt/index.js +0 -572
  260. package/core/com/mqtt/mm_mqtt.js +0 -330
  261. package/core/com/mqtt/script.js +0 -604
  262. package/core/com/msg/com.js +0 -296
  263. package/core/com/msg/com.json +0 -4
  264. package/core/com/nav/com.json +0 -4
  265. package/core/com/nav/config.tpl.json +0 -75
  266. package/core/com/nav/drive.js +0 -549
  267. package/core/com/nav/index.js +0 -182
  268. package/core/com/nav/tpl/admin_pc/page_form.vue +0 -180
  269. package/core/com/nav/tpl/admin_pc/page_view.vue +0 -124
  270. package/core/com/nav/tpl/dev_pc/page_default.vue +0 -247
  271. package/core/com/nav/tpl/dev_pc/page_type.vue +0 -313
  272. package/core/com/nav/tpl/home_pc/page_default.vue +0 -234
  273. package/core/com/nav/tpl/home_pc/page_form.vue +0 -137
  274. package/core/com/nav/tpl/home_pc/page_list.vue +0 -234
  275. package/core/com/nav/tpl/home_pc/page_nav.vue +0 -221
  276. package/core/com/nav/tpl/home_pc/page_type.vue +0 -234
  277. package/core/com/nav/tpl/home_pc/page_view.vue +0 -125
  278. package/core/com/nav/tpl/home_phone/page_channel.vue +0 -234
  279. package/core/com/nav/tpl/home_phone/page_default.vue +0 -234
  280. package/core/com/nav/tpl/home_phone/page_form.vue +0 -137
  281. package/core/com/nav/tpl/home_phone/page_nav.vue +0 -237
  282. package/core/com/nav/tpl/home_phone/page_type.vue +0 -234
  283. package/core/com/nav/tpl/home_phone/page_view.vue +0 -125
  284. package/core/com/nav/viewmodel.js +0 -296
  285. package/core/com/param/drive.js +0 -366
  286. package/core/com/param/index.js +0 -80
  287. package/core/com/param/script.js +0 -12
  288. package/core/com/param/test.js +0 -98
  289. package/core/com/plugin/README.md +0 -3
  290. package/core/com/plugin/com.json +0 -4
  291. package/core/com/plugin/config.tpl.json +0 -26
  292. package/core/com/plugin/drive.js +0 -536
  293. package/core/com/plugin/index.js +0 -259
  294. package/core/com/plugin/script.js +0 -213
  295. package/core/com/rpc/com.json +0 -4
  296. package/core/com/rpc/drive.js +0 -160
  297. package/core/com/rpc/index.js +0 -87
  298. package/core/com/rpc/rpc.js +0 -118
  299. package/core/com/socket/com.json +0 -4
  300. package/core/com/socket/config.tpl.json +0 -14
  301. package/core/com/socket/drive.js +0 -403
  302. package/core/com/socket/index.js +0 -62
  303. package/core/com/socket/script.js +0 -42
  304. package/core/com/sql/drive.js +0 -1087
  305. package/core/com/sql/index.js +0 -83
  306. package/core/com/sql/script.js +0 -48
  307. package/core/com/static/com.json +0 -4
  308. package/core/com/static/drive.js +0 -220
  309. package/core/com/static/index.js +0 -149
  310. package/core/com/static/script.js +0 -28
  311. package/core/com/task/com.json +0 -4
  312. package/core/com/task/drive.js +0 -403
  313. package/core/com/task/index.js +0 -110
  314. package/core/com/task/script.js +0 -37
  315. package/core/com/timer/com.js +0 -217
  316. package/core/com/timer/com.json +0 -4
  317. package/core/com/tpl/com.js +0 -19
  318. package/core/com/tpl/com.json +0 -4
  319. package/lib/actions.js +0 -50
  320. package/lib/base.js +0 -361
  321. package/lib/com.js +0 -29
  322. package/lib/ref.js +0 -121
  323. package/middleware/mqtt_base/index.js +0 -10
  324. package/middleware/mqtt_base/middleware.json +0 -10
  325. package/middleware/performance/index.js +0 -151
  326. package/middleware/performance/middleware.json +0 -16
  327. package/middleware/security_audit/index.js +0 -549
  328. package/middleware/security_audit/middleware.json +0 -48
  329. package/middleware/security_headers/index.js +0 -487
  330. package/middleware/security_headers/middleware.json +0 -45
  331. package/middleware/waf/index.js +0 -348
  332. package/middleware/waf/middleware.json +0 -10
  333. package/middleware/waf_ddos/index.js +0 -520
  334. package/middleware/waf_ddos/middleware.json +0 -38
  335. package/middleware/waf_ip/index.js +0 -379
  336. package/middleware/waf_ip/middleware.json +0 -49
  337. package/middleware/waf_xss/index.js +0 -269
  338. package/middleware/waf_xss/middleware.json +0 -18
  339. package/middleware/web_after/index.js +0 -33
  340. package/middleware/web_after/middleware.json +0 -9
  341. package/middleware/web_base/index.js +0 -90
  342. package/middleware/web_base/middleware.json +0 -9
  343. package/middleware/web_before/index.js +0 -27
  344. package/middleware/web_before/middleware.json +0 -9
  345. package/middleware/web_check/index.js +0 -28
  346. package/middleware/web_check/middleware.json +0 -9
  347. package/middleware/web_main/index.js +0 -28
  348. package/middleware/web_main/middleware.json +0 -9
  349. package/middleware/web_proxy/index.js +0 -37
  350. package/middleware/web_proxy/middleware.json +0 -9
  351. package/middleware/web_render/index.js +0 -87
  352. package/middleware/web_render/middleware.json +0 -9
  353. package/middleware/web_socket/index.js +0 -34
  354. package/middleware/web_socket/middleware.json +0 -9
  355. package/middleware/web_static/index.js +0 -115
  356. package/middleware/web_static/middleware.json +0 -9
  357. /package/{core/com → com}/api/README.md +0 -0
  358. /package/{core/com → com}/db/README.md +0 -0
  359. /package/{core/com → com}/event/README.md +0 -0
  360. /package/{core/com → com}/mqtt/README.md +0 -0
  361. /package/{core/com → com}/nav/README.md +0 -0
  362. /package/{core/com → com}/nav/tpl/admin_pc/page_channel.vue +0 -0
  363. /package/{core/com → com}/nav/tpl/admin_pc/page_default.vue +0 -0
  364. /package/{core/com → com}/nav/tpl/admin_pc/page_lang.vue +0 -0
  365. /package/{core/com → com}/nav/tpl/admin_pc/page_nav.vue +0 -0
  366. /package/{core/com → com}/nav/tpl/admin_pc/page_table.vue +0 -0
  367. /package/{core/com → com}/nav/tpl/admin_pc/page_type.vue +0 -0
  368. /package/{core/com → com}/nav/tpl/dev_pc/page_channel.vue +0 -0
  369. /package/{core/com → com}/nav/tpl/dev_pc/page_config.vue +0 -0
  370. /package/{core/com → com}/nav/tpl/dev_pc/page_form.vue +0 -0
  371. /package/{core/com → com}/nav/tpl/dev_pc/page_nav.vue +0 -0
  372. /package/{core/com → com}/nav/tpl/dev_pc/page_table.vue +0 -0
  373. /package/{core/com → com}/nav/tpl/home_pc/page_channel.vue +0 -0
  374. /package/{core/com → com}/nav/tpl/home_phone/page_list.vue +0 -0
  375. /package/{core/com → com}/param/README.md +0 -0
  376. /package/{core/com/cmd → com/pendant}/README.md +0 -0
  377. /package/{core/com → com}/socket/README.md +0 -0
  378. /package/{core/com → com}/sql/README.md +0 -0
  379. /package/{core/com → com}/static/README.md +0 -0
  380. /package/{core/com → com}/task/README.md +0 -0
@@ -1,348 +0,0 @@
1
- /**
2
- * 使用正则表达式,检测字符串是否含有攻击特征,检测到攻击特征返回true,没检测到返回false
3
- * @param {String} url 网址
4
- */
5
- function waf_check(url) {
6
- // 基本防御
7
- var rule = [
8
- /select.+(from|limit)/i,
9
- /(?:(union(.*?)select))/i,
10
- /sleep\((\s*)(\d*)(\s*)\)/i,
11
- /group\s+by.+\(/i,
12
- /(?:from\W+information_schema\W)/i,
13
- /(?:(?:current_)user|database|schema|connection_id)\s*\(/i,
14
- /\s*or\s+.*=.*/i,
15
- /order\s+by\s+.*--$/i,
16
- /benchmark\((.*)\,(.*)\)/i,
17
- /base64_decode\(/i,
18
- /(?:(?:current_)user|database|version|schema|connection_id)\s*\(/i,
19
- /(?:etc\/\W*passwd)/i,
20
- /into(\s+)+(?:dump|out)file\s*/i,
21
- /xwork.MethodAccessor/i,
22
- /(?:define|eval|file_get_contents|include|require|require_once|shell_exec|phpinfo|system|passthru|preg_\w+|execute|echo|print|print_r|var_dump|(fp)open|alert|showmodaldialog)\(/i,
23
- /\<(iframe|script|body|img|layer|div|meta|style|base|object|input)/i,
24
- /(onmouseover|onmousemove|onerror|onload)\=/i,
25
- /javascript:/i,
26
- // 增强的路径遍历检测规则
27
- /\.\.\//i, // 基础 ../
28
- /\.\.\\/i, // Windows格式 ..\
29
- /\%2e\%2e\//i, // URL编码 ../
30
- /\%2e%2e\//i, // URL编码 ../
31
- /\%252e%252e%2f/i, // 双重URL编码 ../
32
- /\%252e\%252e\%2f/i, // 双重URL编码 ../
33
- /\.\%2e\//i, // 混合编码
34
- /\%2e\./i, // 变体形式
35
- /\%5c/i, // 反斜杠URL编码
36
- /\%255c/i, // 反斜杠双重URL编码
37
- // 系统文件路径检测
38
- /(?:\/etc|\/proc|\/sys|\/dev|C:\\Windows|C:\\winnt|C:\\Program Files)/i,
39
- // 命令注入检测
40
- /\|\|.*(?:ls|pwd|whoami|ll|ifconfog|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv)/i,
41
- /(?:ls|pwd|whoami|ll|ifconfog|ipconfig|&&|chmod|cd|mkdir|rmdir|cp|mv).*\|\|/i,
42
- /(gopher|doc|php|glob|file|phar|zlib|ftp|ldap|dict|ogg|data)\:\//i
43
- ];
44
- for (var i = 0; i < rule.length; i++) {
45
- if (rule[i].test(url) == true) {
46
- return rule[i];
47
- }
48
- }
49
- return null;
50
- }
51
-
52
- /**
53
- * 检查路径是否包含路径遍历攻击
54
- * @param {String} path 路径
55
- * @returns {Boolean} 是否包含路径遍历
56
- */
57
- function checkPathTraversal(path) {
58
- // 规范化路径以处理各种编码
59
- let normalizedPath = path;
60
-
61
- // 处理URL编码变体
62
- const urlDecoded = decodeURIComponent(path);
63
- const doubleUrlDecoded = decodeURIComponent(urlDecoded);
64
-
65
- // 检查路径是否包含危险模式
66
- const dangerousPatterns = [
67
- '../', '../../', '../../../', // Unix/Linux格式
68
- '..\\', '..\\\\', '..\\\\\\', // Windows格式
69
- '/%2e%2e/', '/%2e%2e%2f', // URL编码变体
70
- '\\%2e%2e\\', '\\%2e%2e\\\\' // Windows URL编码变体
71
- ];
72
-
73
- // 检查系统关键文件路径(绝对路径攻击)
74
- const systemPaths = [
75
- '/etc/passwd', '/etc/shadow', '/etc/group', '/etc/hosts',
76
- '/proc/', '/sys/', '/dev/', '/bin/', '/usr/bin/',
77
- 'C:\\Windows\\', 'C:\\winnt\\', 'C:\\Program Files\\'
78
- ];
79
-
80
- // 检查原始路径、单次解码和双重解码后的路径
81
- // 1. 检查相对路径遍历模式
82
- const hasTraversalPattern = dangerousPatterns.some(pattern =>
83
- path.includes(pattern) ||
84
- urlDecoded.includes(pattern) ||
85
- doubleUrlDecoded.includes(pattern)
86
- );
87
-
88
- // 2. 检查绝对路径攻击(包含系统关键文件路径)
89
- const hasAbsoluteAttack = systemPaths.some(systemPath =>
90
- path.toLowerCase().includes(systemPath.toLowerCase()) ||
91
- urlDecoded.toLowerCase().includes(systemPath.toLowerCase()) ||
92
- doubleUrlDecoded.toLowerCase().includes(systemPath.toLowerCase())
93
- );
94
-
95
- // 3. 检查是否以/开头的绝对路径(排除正常的网站路径)
96
- const startsWithSlash = path.startsWith('/') &&
97
- !path.startsWith('/api') &&
98
- !path.startsWith('/static') &&
99
- !path.startsWith('/public') &&
100
- !path.startsWith('/assets') &&
101
- !path.startsWith('/favicon.ico') &&
102
- !path.startsWith('/robots.txt');
103
-
104
- // 4. 检查是否包含敏感的系统文件扩展名
105
- const hasSensitiveExtension = /\.(conf|ini|log|env|git|svn|htpasswd|htaccess|bashrc|bash_history|ssh|key|pem|cer|crt|pfx|p12)$/i.test(path) ||
106
- /\.(conf|ini|log|env|git|svn|htpasswd|htaccess|bashrc|bash_history|ssh|key|pem|cer|crt|pfx|p12)$/i.test(urlDecoded) ||
107
- /\.(conf|ini|log|env|git|svn|htpasswd|htaccess|bashrc|bash_history|ssh|key|pem|cer|crt|pfx|p12)$/i.test(doubleUrlDecoded);
108
-
109
- return hasTraversalPattern || hasAbsoluteAttack || startsWithSlash || hasSensitiveExtension;
110
- }
111
-
112
- /**
113
- * 检查请求路径是否规范化,防止路径遍历攻击
114
- * @param {String} path 请求路径
115
- * @returns {Boolean} 是否为安全路径
116
- */
117
- function isSafePath(path) {
118
- // 特殊处理根路径,直接返回安全
119
- if (path === '/') {
120
- return true;
121
- }
122
-
123
- // 获取规范化的路径
124
- const normalizedPath = path.split('/')
125
- .filter(segment => segment !== '')
126
- .reduce((acc, segment) => {
127
- // 防止路径回溯
128
- if (segment === '..') {
129
- acc.pop();
130
- } else if (segment !== '.') {
131
- acc.push(segment);
132
- }
133
- return acc;
134
- }, [])
135
- .join('/');
136
-
137
- // 重新构建规范化的完整路径
138
- const safePath = '/' + normalizedPath;
139
-
140
- // 检查规范化后的路径长度是否小于原始路径(表示存在路径回溯)
141
- return safePath.length >= path.length - 2; // 允许末尾的 '/' 差异
142
- }
143
-
144
- function getClientIP(req) {
145
- return req.headers['x-forwarded-for'] || req.headers['X-Forwarded-For'] ||
146
- req.connection.remoteAddress ||
147
- req.socket.remoteAddress ||
148
- req.connection.socket.remoteAddress;
149
- };
150
-
151
- /**
152
- * 检查IP是否在白名单中
153
- * @param {String} ip IP地址
154
- * @param {Object} config WAF配置
155
- * @returns {Boolean} 是否在白名单中
156
- */
157
- function isInWhitelist(ip, config) {
158
- // 获取配置中的白名单,如果不存在则使用默认白名单
159
- const whitelist = config && config.ip_whitelist && Array.isArray(config.ip_whitelist)
160
- ? config.ip_whitelist
161
- : ['127.0.0.1', '::1', 'localhost', '192.168.31.5'];
162
-
163
- return whitelist.includes(ip);
164
- }
165
-
166
- /**
167
- * 检查路径是否在白名单中
168
- * @param {String} path 请求路径
169
- * @param {Object} config WAF配置
170
- * @returns {Boolean} 是否在白名单中
171
- */
172
- function isPathWhitelisted(path, config) {
173
- // 获取配置中的路径白名单,如果不存在则使用默认路径白名单
174
- const pathWhitelist = config && config.path_whitelist && Array.isArray(config.path_whitelist)
175
- ? config.path_whitelist
176
- : ['/static', '/favicon.ico', '/api', '/public', '/assets'];
177
-
178
- // 检查路径是否以白名单中的任何路径开头
179
- return pathWhitelist.some(whitelistPath => path.startsWith(whitelistPath));
180
- }
181
-
182
- /**
183
- * web防火墙
184
- * @param {Object} server 服务
185
- * @param {Object} config 配置参数
186
- */
187
- module.exports = function(server, config) {
188
- // 设置默认配置
189
- const defaultConfig = {
190
- log: true,
191
- ip_whitelist: ['127.0.0.1', '::1', 'localhost', '192.168.31.5'],
192
- path_whitelist: ['/static', '/favicon.ico', '/api', '/public', '/assets']
193
- };
194
-
195
- // 强制输出初始化日志
196
- console.log('WAF MIDDLEWARE INITIALIZED');
197
-
198
- // 获取全局配置中的middleware.waf配置
199
- let wafConfig = defaultConfig;
200
- try {
201
- // 尝试从全局配置中获取middleware.waf配置
202
- const fs = require('fs');
203
- const path = require('path');
204
- const configPath = path.resolve(process.cwd(), 'config.json');
205
- if (fs.existsSync(configPath)) {
206
- const globalConfig = JSON.parse(fs.readFileSync(configPath, 'utf8'));
207
- if (globalConfig.middleware && globalConfig.middleware.waf) {
208
- // 安全地合并默认配置和全局配置
209
- wafConfig = Object.assign({}, defaultConfig, globalConfig.middleware.waf);
210
- console.log('WAF using global config from config.json');
211
- } else {
212
- console.log('WAF using default config (no middleware.waf in config.json)');
213
- }
214
- }
215
- } catch (error) {
216
- console.error('Error loading global WAF config:', error.message);
217
- // 出错时使用默认配置
218
- wafConfig = defaultConfig;
219
- }
220
-
221
- // 确保白名单数组存在且为数组类型
222
- if (!Array.isArray(wafConfig.ip_whitelist)) {
223
- wafConfig.ip_whitelist = defaultConfig.ip_whitelist;
224
- }
225
- if (!Array.isArray(wafConfig.path_whitelist)) {
226
- wafConfig.path_whitelist = defaultConfig.path_whitelist;
227
- }
228
-
229
- // 合并传入的config和全局配置
230
- const mergedConfig = { ...wafConfig, ...(config || {}) };
231
- console.log('Merged WAF Config:', JSON.stringify(mergedConfig));
232
-
233
- /* WAF(web防火墙) */
234
- server.use(async (ctx, next) => {
235
- try {
236
- // 获取客户端IP
237
- var ip = getClientIP(ctx.req);
238
- // 规范化IP格式,移除IPv6前缀
239
- if (ip && ip.startsWith('::ffff:')) {
240
- ip = ip.substring(7);
241
- }
242
-
243
- // 获取请求路径
244
- const path = ctx.path;
245
-
246
- // 强制输出请求处理日志
247
- console.log('WAF PROCESSING REQUEST');
248
- console.log('URL:', ctx.url);
249
- console.log('Path:', path);
250
- console.log('Method:', ctx.method);
251
- console.log('IP:', ip);
252
-
253
- // 检查IP是否在白名单中,如果是则跳过所有检查
254
- if (isInWhitelist(ip, mergedConfig)) {
255
- console.log(`WAF: IP ${ip} in whitelist, skipping checks`);
256
- await next();
257
- return;
258
- }
259
-
260
- // 检查路径是否在白名单中
261
- if (isPathWhitelisted(path, mergedConfig)) {
262
- console.log(`WAF: Path ${path} in whitelist, skipping checks`);
263
- await next();
264
- return;
265
- }
266
-
267
- // 获取请求路径和完整URL
268
- var url = ctx.url;
269
-
270
- // 1. 使用正则表达式检查基本攻击特征
271
- console.log('Step 1: Basic attack pattern check');
272
- var danger = waf_check(url);
273
- console.log('WAF check result:', danger ? danger.toString() : 'safe');
274
- if (danger) {
275
- console.warn(`BLOCKED ATTACK from IP ${ip}:`, danger.toString());
276
- // 阻止攻击请求,返回403禁止访问
277
- ctx.status = 403;
278
- ctx.body = {
279
- code: 403,
280
- msg: '访问被WAF阻止,请求包含潜在的攻击特征',
281
- rule: danger.toString()
282
- };
283
- return;
284
- }
285
-
286
- // 2. 专门检查路径遍历攻击
287
- console.log('Step 2: Path traversal check');
288
- const hasTraversal = checkPathTraversal(path);
289
- const isSafe = isSafePath(path);
290
- console.log('Path traversal check results:', { path, hasTraversal, isSafe });
291
-
292
- if (hasTraversal || !isSafe) {
293
- console.warn(`BLOCKED PATH TRAVERSAL from IP ${ip}:`, path);
294
- ctx.status = 403;
295
- ctx.body = {
296
- code: 403,
297
- msg: '访问被WAF阻止,检测到路径遍历攻击尝试'
298
- };
299
- return;
300
- }
301
-
302
- // 3. 检查请求参数中的路径遍历
303
- console.log('Step 3: Query parameter traversal check');
304
- const queryParams = ctx.query;
305
- for (const [key, value] of Object.entries(queryParams)) {
306
- if (typeof value === 'string') {
307
- const paramHasTraversal = checkPathTraversal(value);
308
- console.log('Param check:', { key, value, paramHasTraversal });
309
- if (paramHasTraversal) {
310
- console.warn(`BLOCKED PARAM TRAVERSAL from IP ${ip}:`, `${key}=${value}`);
311
- ctx.status = 403;
312
- ctx.body = {
313
- code: 403,
314
- msg: '访问被WAF阻止,请求参数中包含路径遍历攻击尝试'
315
- };
316
- return;
317
- }
318
- }
319
- }
320
-
321
- // 4. 如果是POST请求,检查请求体
322
- console.log('Step 4: POST body traversal check');
323
- if (ctx.method === 'POST' && ctx.request.body) {
324
- const bodyContent = JSON.stringify(ctx.request.body);
325
- const bodyHasTraversal = checkPathTraversal(bodyContent);
326
- console.log('Body check results:', bodyHasTraversal);
327
- if (bodyHasTraversal) {
328
- console.warn(`BLOCKED BODY TRAVERSAL from IP ${ip}`);
329
- ctx.status = 403;
330
- ctx.body = {
331
- code: 403,
332
- msg: '访问被WAF阻止,请求体中包含路径遍历攻击尝试'
333
- };
334
- return;
335
- }
336
- }
337
-
338
- console.log('WAF: All checks passed, continuing request');
339
- // 所有检查通过,继续处理请求
340
- await next();
341
- } catch (error) {
342
- console.error('WAF MIDDLEWARE ERROR:', error);
343
- // 出错时默认允许请求继续处理
344
- await next();
345
- }
346
- });
347
- return server;
348
- };
@@ -1,10 +0,0 @@
1
- {
2
- "name": "web_waf",
3
- "title": "web防火墙",
4
- "description": "用于防止sql注入、脚本注入等",
5
- "version": "1.0",
6
- "type": "web",
7
- "process_type": "common_before",
8
- "sort": 20,
9
- "state": 1
10
- }