創造を続け、成長を加速させましょう!「ナゲッツデイリーニュープラン・6月アップデートチャレンジ」に参加して3日目です。クリックしてイベントの詳細をご覧ください。
私は今日起きて实施人员
、致命的な電話を受けました:咋回事呢?表单数据咋保存不了了呢?
= _ =
いいやつ、これを聞いた後、私は盲目で、本当にハゲで、朝に死ぬように呼びました!!!
バディは何もしていないようだと思いました。状況はどうですか!!!
待って、考えてみると、nacos未授权访问的漏洞
昨日修理されたようですが、これが原因でしょうか?
それからすぐに会社に戻ってサーバーをチェックしましたが、いい人は本当にこれで、seataは電話を切ります。分散トランザクションが失敗し、フォームの保存に失敗します。!!
これは確かに仲間の問題です、この問題に気づいていませんでした!!!
賃金から差し引かれませんか???
さて、今日それについて話しましょう、nacosは認証を有効にし、パスワードを変更します。Seata分散トランザクション、障害問題の開始、話し合い、調査!!!
認証失敗の問題が報告され403
、解決されました!!!
1.重要な注意事項
問題が発生するバージョンseata
は1.4.2
次。
2.nacosのバグ修正
nacosの不正アクセスの脆弱性は以前に修正され、nacos認証アクセスが有効になり、パスワードが変更されました。
vi nacos / conf / application.properties
#开启认证配置
nacos.core.auth.enabled=true
复制代码
パスワードを次のように変更します。
nacos123!@
3.シータスタート
構成ファイルのパスワードが変更されましnacos123!@
たが、seataをアクティブ化できません!!!
Seataは、構成センターおよび登録センターとしてnacosを統合しています。統合方法については、ここでは詳しく説明しません。ここを参照してください。
すると、インターネットで答えを見つけたところ、パスワードに特殊文字が入っていてエスケープされているそうです!!!
それでは、nacosパスワードを変更し、に変更しnacos123
、特殊記号を削除して、テストしてみましょう。
いいやつ、スタートアップは成功した、これは本当に問題だ!!!
4.原因分析
看到这里,咱们不禁得想一下,究竟是哪里对密码进行了转义呢?
有好奇心的同学,咱们继续往下看,从源码中分析一下,找到转义的代码。
开干!!!
seata源码构建。可以参考这里:点击查看,这里就不再一 一讲解了!!!
现在,咱们一步步进行debug调试:
- 直接启动server.java
启动报错了,NacosConfiguration出错了。那我们进入到NacosConfiguration类去看一下报错的地方。
这个错是NacosConfiguration输出的,我们可以通过输出的日志定位到具体的位置,但是这里没有,所以我们将断点,打到所有的logger上面来。
可以看到是NacosConfiguration.getLatestConfig方法打印的错误日志信息。
说明是configService.getConfig方法抛弃异常了,那我们进入configService.getConfig方法查看。
以上就是一步步调试,进入的方法图了,最终是NacosRestTemplate的execute方法,执行http请求,与nacos进行交互
那我们在execute方法,打个断点。
很明显,已经快要找到原因了,已经看到password,确实是被转义了。
接下来,对方法调用栈一步步往上找,即可。
很明显可以看到,就是这里的问题了:SecurityProxy类,login方法,
URLEncoder.encode(password, "utf-8")
注意:nacos-client的版本是1.3.3
原因找到了!!!
好的,看到这里,基本上,咱们就已经知道password被转义具体的原因了,也能知道是在哪里被转义了。
看到这里,咱们就有点奇怪了,seata版本是1.4.1,为啥用1.3.3版本的nacos-client呢?
难道这里,会有什么猫腻?
带着这个问题,我们看一下1.4.1
版本的nacos-client
的SecurityProxy
类。
ここを参照してください。nacos-clientの1.4.1バージョンはパスワードをエンコードしなくなりました。
よかったね!!!
それで、これは公式のバグなのだろうかと思いました。Seata1.4.1バージョンのソースコード、なぜそれを構築するためにnacos-clientの1.3.3バージョンを使用するのですか?
- githubのSeataバージョン1.4.1:pomの依存関係
それは確かにバージョン1.3.3のnacos-clientです
それでもあきらめないで、それから1.4.2バージョンのseataを見てください?:pomの依存関係
Seataの1.4.2バージョンは、nacos-clientの1.3.3バージョンでもあります。
公式、本当にあなたがいます!!!
最終的解決:
1.少なくとも1.4.2より後のseataバージョンをアップグレードします。(1.5.1バージョンでこのバグが修正されたかどうかはわかりません。テストする運命にある人に渡します!)
2.特殊文字なしでnacosパスワードを変更します。
3.バージョン1.4.1のseataソースコードの場合、nacos-clientバージョンを1.4.1に変更し、seataサービスを再構築します。(どんな穴があるかわかりません、それをテストする運命にある誰かにそれを与えます!)
結局、私はここにいます、私はもう投げたくありません、速く、2番目の方法を選んでください!!!
ふりが完了しました!!!
さて、nacosパスワードの変更により、seataの起動に失敗しました(ソースコード分析)ので、ここにあります!!!
私は今日最初にここにいます、スキミング、スキミング!!!^ _ ^
あなたがそれが役に立つと思うならば、助けてください点个赞
!!!