やっとのことで、Snyk CLIを使ってローカルに保存したApex Classのコードをスキャンすることができました...
- Snyk(スニーク)って、Salesforceでも使えるの?(前編)
- Snyk(スニーク)って、Salesforceでも使えるの?(中編)
- Snyk(スニーク)って、Salesforceでも使えるの?(後編)
フリープランの制限を見ているとまだスキャンできそうなので、どんな結果が返ってくるかを調べてみたいと思います。
やっと、現在のスキャン回数が分かった。
では初めてみます。
まずは認証からです。
./snyk auth
略
Your account has been authenticated. Snyk is now ready to be used.
準備できました。Apex Classをテキストファイルにコピーします。拡張子はclsです。
./snyk code test --org=XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX
Testing C:\Users\user\Desktop\snyk ...
✗ [High] Server-Side Request Forgery (SSRF)
Path: fkd_freee.cls, line 252
Info: Unsanitized input from a SOQL statement flows into setendpoint, where it is used as an URL to perform a request. This may result in a Server-Side Request Forgery vulnerability.
✔ Test completed
Organization: a3bd617b-f350-4a80-a2a2-abbe685121b0
Test type: Static code analysis
Project path: C:\Users\user\Desktop\snyk
Summary:
1 Code issues found
1 [High]
おおお、エラーになった。
Unsanitized input from a SOQL statement flows into setendpoint, where it is used as an URL to perform a request. This may result in a Server-Side Request Forgery vulnerability.
SOQL ステートメントからのサニタイズされていない入力は setendpoint に流れ、そこでリクエストを実行するための URL として使用されます。これにより、サーバー側のリクエスト フォージェリの脆弱性が発生する可能性があります。
ちょうどこの部分だけど、何が問題なんだろう?
同じような質問がありますが、回答を読んでも解決策は分からないですね。
他にもreq.setEndpoint(path + '?' + parameters);を使ったメソッドはあるのですが、こちらはエラーになってない。違いは直前にレコードタイプを検索するSOQLがあることくらいです。
画面からの入力された値は使っていないんですがね。SOQLとsetEndpointの組み合わせに反応しているんでしょうか?
バインド変数とかを使う必要があるのかな?
sobject[] recordTypeList = [select Id, Name from RecordType WHERE Name = '得意先' ];
if (acc.RecordTypeId == recordTypeList[0].Id ){
parameters += 'keyword=' + EncodingUtil.urlEncode(acc.customer_code__c, 'UTF-8');
} else {
parameters += 'keyword=' + EncodingUtil.urlEncode(acc.supplier_code__c, 'UTF-8');
}
HttpRequest req = new HttpRequest();
req.setEndpoint(path + '?' + parameters);
この部分は取引先オブジェクトのレコードタイプで得意先と仕入先を別けています。それぞれコードを持っているのでレコードタイプを見てどちらかを判断しています。両方入っていることはないので、レコードタイプでの検索を止めて、acc.supplier_code__cがブランクなら得意先コード、そうでないなら仕入先コードをセットするように変えてみます。
以下のように変更してSOQLを完全になくしたのですが、同じエラーになりますね。よくわからん。
Testing C:\Users\user\Desktop\snyk ...
✗ [High] Server-Side Request Forgery (SSRF)
Path: fkd_freee.cls, line 252
Info: Unsanitized input from a SOQL statement flows into setendpoint, where it is used as an URL to perform a request. This may result in a Server-Side Request Forgery vulnerability.
✔ Test completed
Organization: a3bd617b-f350-4a80-a2a2-abbe685121b0
Test type: Static code analysis
Project path: C:\Users\user\Desktop\snyk
Summary:
1 Code issues found
1 [High]
ソースコードを移動させたら、ターゲットのソースがないってエラーになるかと思ったのですが、同じエラーメッセージが出続けますね。どこかに覚えているのかな?
使い方がはやり分かってないです。マニュアルをちゃんと読まないといけないみたいですね。
2023/12/23 追記
PCを再起動して同じようにチェックしてみました。ソースコードは変更されているのですが、同じエラーメッセージです。 う~ん、使い方が分からない。どうも私には難しすぎて活用できないようです。残念...