[Herokuアドオン]cloudinaryでの画像制限設定について
cloudinaryを利用した時に他者に乱用されたりしないのかどうかを調べてみた。
画像のURL
アップロードする際に、画像名となるpublic_urlを指定しなければランダムで文字列がふられる。
デフォルトでのアップロードの例
https://res.cloudinary.com/harslxcej/image/upload/xa9kfgp9jvxouekmrrqu
harslxcejはcloudinaryアカウトごとの名前。cloud_nameと呼ばれるもの。
Cloud Name | API, URLs and access identifiers | Cloudinary
これだけでも推測は不可能だが、さらにprivateモードを利用することでさらに複雑にすることが可能。
PHPでのアップロード時のオプション
1 2 3 | |
表示時のオプション
1 2 3 | |
表示URL
http://res.cloudinary.com/harslxcej/image/private/leyxq6ys2wielv6b8yki
しかしこのままではアクセスが出来ない。
このURLでのアクセスを許可してやる必要がある。
編集セットの個別許可
Cloudinaryの管理画面から、Transformationsを選択。
ここに、いままでアクセスしたことがある編集設定などがずらずらと並んでいるので、その中から探し出すか、新たに設定を作成してやる。

編集設定を作る

で、許可したい編集セットのDisallowedとなっているマーク部分をクリックすると、Allowedの緑アイコンに代わり、アクセスが許可される。
(編集なしの生データにアクセスを許可してやるには、Create a new transformaton..で何もせずにそのまま保存してやればよい。)

sign_url
最初はsign_urlをつけないとプライベートのものはアクセス出来ないと思っていたが、上記の方法で解消できた。
以下でもアクセスは出来るが、プライベートタイプのものを表示する方法、という用途ではないと思われる。
"sign_url"=>trueをつけると固定のURLとなるので、編集が不可能になるが、表示が許可されるようになる。
1 2 3 4 | |
表示URL
https://res.cloudinary.com/harslxcej/image/private/s–q7MlJXLg–/leyxq6ys2wielv6b8yki.jpg
直リンクは可能
ただし、URLさえわかってしまえば、表示することは可能。
また、いわゆる別サーバーからの直リンク、も制限は出来ない。
編集の制限
cloudinaryはURLから直接画像や動画を編集する事が出来る。
例えば以下のような指定。
https://res.cloudinary.com/harslxcej/image/upload/h_100,w_100,c_fill/xa9kfgp9jvxouekmrrqu
これをプログラムからの指定のみに制限する事が可能。
Cloudinaryの管理画面から、Setting -> Securityにアクセス。
Strict transformations:をEnabledにしてsaveする。
これで、URLからの直接編集が禁止となる。

2つ下の項目に、Strict video transformations:と動画でも同じく禁止する設定があるので合わせて設定しておくとよいかも。
これで、PHPなどプログラム上からの生成以外は制限することができたが、
特定のURLからのみはURLでの編集を許可してやることも可能。
上記、Security画面から、Allowed strict referral domains:に許可したいドメインを指定することで設定できる。

参考
Does Cloudinary support uploading private images? – Cloudinary Support
Can our users upload private images which are not accessible through a public URL? – Cloudinary Support
How to quickly build a stock photo site using Cloudinary | Cloudinary Blog