Zoho CRM APIフレームワークのセキュリティ強化

Zoho CRM APIユーザーの皆さまへのお知らせです。

Zoho CRMは、2017年4月8日にAPIフレームワークのセキュリティ強化を実施する予定です。この強化に伴い、APIユーザーはパラメーター値の一部の文字をエンコードする必要があります。文字の詳細なリストについては、以下で詳しく説明します。今回の更新後にこれらの文字をパラメーター値として使用した場合、安全と見なされなくなります。

そのため、2017年4月8日までにAPI呼び出しを調べ、安全でない文字をエンコードすることを強くお勧めします。そうしないと、既存のAPI呼び出しが破損する可能性があります。

エンコードが必要な理由

API呼び出しで安全でない文字を使用すると、セキュリティ上の問題に対して脆弱になるというリスクが発生します。ここでは、安全でない文字を使用した場合に発生する脆弱性の問題についてかんたんに説明します。

HTTPリクエスト行を解析するコードでは、無効な文字の使用が認められています。これは無効な文字も使用できるが異なる解釈をするプロキシーと共に、HTTPレスポンスへのデータ挿入に不正利用される可能性があります。HTTPレスポンスを操作することにより、攻撃者はWebキャッシュをポイズニングし、XSS攻撃を実行したり、他者のリクエストから機密情報を取得したりすることができます。

こうした理由により、Zohoは来月、セキュリティ強化を実施します。そのため、2017年4月8日までにAPI呼び出し内の安全でない文字をエンコードすることをお勧めします。

エンコードする文字

安全な文字と安全でない文字は、以下のとおりです。安全でない文字はエンコードする必要があります。

エンコード不要の安全な文字:

  • 英数字:[0-9 a-z A-Z]
  • 特殊文字:$ -_ .+ ! * ' ( ) ,
  • 予約文字:予約済みの目的で使用する場合(例:/ ? : = &)

エンコードが必要な安全でない文字:

  • ASCII制御文字
    ISO-8859-1(ISO-Latin)の文字範囲00~1F(16進数。10進数では0~31)と7F(10進数では127)
  • 非ASCII文字
    ISO-Latinセットの「上半分」全体の80~FF(16進数。10進数では128~255)
  • 安全でない文字:
    空白と" < > # % { } | \ ^ ~ [ ] `
  • 予約文字:予約済みまたは定義済みの目的で使用しない場合

たとえば、次のURLについて考えてみましょう。

誤ったURL:

https://crm.zoho.com/crm/private/xml/Leads/searchRecords?authtoken=<authtoken>&criteria=(Last Name:Amelia{Burrows)

上記のリストによると、Amelia{Burrows){は安全でない文字です。この文字をエンコードしないと、セキュリティ強化後はエラーが発生します。

代わりに、この文字を%7Bにエンコードする必要があります。

正しいURL:

誤ったパラメーター値をエンコードしました。正しいURLは以下のとおりです。

https://crm.zoho.com/crm/private/xml/Leads/searchRecords?authtoken=<authtoken>&criteria=%28Last+Name%3AScott%7BBurrows%29

上記のリストを参照して、2017年4月8日までに安全でない文字を認識し、URL内の文字を適切にエンコードしてください。

エンコード方法

さまざまな言語で文字をエンコードする手順を以下に示します。

言語スクリプト
JavaURLEncoder.encode("(Last Name:Amelia{Burrows)", "UTF-8");
RubyURI::encode("(Last Name:Amelia{Burrows)")
PHPurlencode("(Last Name:Amelia{Burrows)")

ご質問がある場合は、support@zohoccrm.comまでメールでお問い合わせください(英語対応)。