質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Q&A

解決済

1回答

1076閲覧

django チャット機能 redisのパスワード設定後の運用ができない

etcetera

総合スコア24

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

0グッド

0クリップ

投稿2021/12/20 13:40

djangoでchannelsを使ったチャット機能を実装する際に、キャッシュサーバーとしてredisを使おうとしていて、下記のurlのサイトを参考にredisの設定を行いました。サイトではセキュリティ強化のため、redisパスワードの設定を推奨されていたため、パスワードを設定したのですが、サーバーを起動して動かすと、aioredis.errors.AuthError: NOAUTH Authentication required というエラーが出てしまいます。パスワード設定後の運用について調べたのですが、参考にできるサイトが見つからず困っています。パスワードを外すと問題なく動作するのですが、やはりパスワードはつけておいたほうがいいですよね?

ちなみに
redis-cli
127.0.0.1:6379> AUTH password
を入力すると、OKと出力されるため、ユーザー認証は成功していると思います。

python

1CHANNEL_LAYERS = { 2 "default": { 3 "BACKEND": "channels_redis.core.RedisChannelLayer", 4 "CONFIG": { 5 "hosts": [('127.0.0.1', 6379)] 6 } 7 } 8}

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

これでどうでしょうか? (参考)

python

1CHANNEL_LAYERS = { 2 'default': { 3 'BACKEND': 'channels_redis.core.RedisChannelLayer', 4 'CONFIG': { 5 'hosts': [ 6 'redis://:パスワード@127.0.0.1:6379' 7 ], 8 }, 9 }, 10}

投稿2021/12/20 14:36

umau

総合スコア805

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

etcetera

2021/12/22 09:00

ありがとうございます! 正常に動作しました!しかし、これだとgithub等に公開する時にパスワードが公開されてしまうと思うのですが、その場合はどうすれば良いでしょうか?
umau

2021/12/22 10:04

OSの環境変数にパスワード保存して、 import os os.environ.get('PASSWORD') で取ってくればいいと思います。
etcetera

2021/12/23 07:29

重ねて質問して申し訳ないのですが、この場合他の一般ユーザーはredisを利用することができないですよね?チャット機能において、他のユーザーにキャッシュサーバーとしてのredisの使用は許可して、悪質なコマンド(FLASHALL等)を実行するのを防ぎたいだけなのですが、この場合どうすればよいでしょうか?
umau

2021/12/23 09:50

これはdjangoとredisの接続設定ですよね。その設定URIの文字列を内部でどう組み立てようが、それによってユーザー側が使えなくなるというのは、普通ならあり得ないと思うんですが、どういう実装なんでしょうか。チャット利用者はあくまでdjangoが表示する画面を触るだけで、内部でdjangoとredisの接続が確立してしまえば、利用者には中のredisは関係ないはずですよね。 チャット利用者によるSQLインジェクション的な攻撃を気にされているのでしたら、それはRedisへのログインにパスワード認証をかけることで防ぐ話ではないと思います。 ちなみにredisの公式は「通常のクライアントライブラリを使用した通常の状況ではインジェクションは不可能」と言っています。 (ただし、RedisはLuaというスクリプト言語に対応しているため、もしあなたがdjango内でLuaスクリプトを組み立てるような処理を書いている場合、それへのインジェクションはあり得るかもしれませんが、その場合はLuaスクリプトに直接ユーザーのrequestを渡さないように実装すればよいだけだと思います。) https://redis.io/topics/security https://atmarkit.itmedia.co.jp/ait/articles/1306/15/news001.html ※パスワードかけておくことで、パスワードを知るあなた(と開発チームの人)以外の誰でもredis-cliでログインして中をいじれるという状態は防げるので、「チャット利用者による不正コマンド実行はムリだからパスワードいらない」という事を言っているわけでは無いのであしからず。
umau

2021/12/23 10:03

「一般ユーザーが使えなくなる」というのは、環境変数化したら本番環境で動かなくなる、という意味でしょうか。 それはGitHubに公開しないために、本番環境含めたdjangoを起動する環境全てにおいて、環境変数にパスワードを保存する、という運用イメージになります。わりと常套手段の一つかと。
etcetera

2021/12/23 11:29

>「一般ユーザーが使えなくなる」というのは、環境変数化したら本番環境で動かなくなる、という意味でしょうか。 はい、その通りです。わかりにくくてすみません。 なるほど、本番環境の環境変数に設定しておけば良いのですね。勉強になりました。 ご丁寧に回答ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問