Flask タグの一覧です(18 件)

[Werkzeug][Flask]FlaskをSalted Passwordsに対応させる

本当は怖いパスワードの話(1/4) - @ITを読んでなるほどなぁって思っていたのですが、それじゃあFlaskでソルト化(ソルト化っていう言葉が正しいかわかりませんが今回はこう書きます)ってどうやるんだろうかと調べたら、そのものズバリの事例がスニペット集に載っていました。


つまりはWerkzeug(ヴェルクツォィグって読む)がソルト化とそのチェック機能を提供してくれるとのこと。せっかくなのでこのBlogの管理者ログインパスワードをソルト化しました。

generate_password_hashを使ったパスワードのハッシュ+ソルト化

スニペットではwerkzeug.securityのgenerate_password_hashとcheck_password_hashを使ったclassを作成していますが、今回はあくまで個人Blogでの管理者パスワードのみ対応ですので、コマンドラインで作ります。 こちらを参考に
Python 2.6.1 (r261:67515, Jun 24 2010, 21:47:49) 
[GCC 4.2.1 (Apple Inc. build 5646)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>>
>>> from werkzeug.security import generate_password_hash
>>> generate_password_hash("orenopass")
'sha1$4wGWLe5J$d1babced1d89ad9ff811107b7f42ca866fd7b65d'
>>> 

ついでにチェックをしてみます
>>> from werkzeug.security import check_password_hash
>>> ssha1 = 'sha1$4wGWLe5J$d1babced1d89ad9ff811107b7f42ca866fd7b65d'
>>> check_password_hash(ssha1,'orenopass')
True
>>> check_password_hash(ssha1,'omaenopass')
False

Blogに組み込む

生成されたソルト化されたハッシュをブログに組み込みます。私の場合はコンフィグファイルに各種設定値を記述しているのでそちらを編集します。今までPASSWORDが記述されていたところにHASHPASSWORDを記載し、PASSWORD項目は削除します。
% vi ./oreno.cfg

SQLALCHEMY_DATABASE_URI = 'sqlite:////Path/to/www/app/oreno.db'
SQLALCHEMY_ECHO = False
SECRET_KEY = 'SECRET_KEY'
USERNAME = 'orenonamae'
HASHPASSWORD = 'sha1$4wGWLe5J$d1babced1d89ad9ff811107b7f42ca866fd7b65d'
DEBUG = True

次に認証ロジックを修正します。
% vi ./app.py

@app.route('/login', methods=['GET','POST'])
def login():
    error = None
    if request.method == 'POST':
        if request.form['username'] != app.config['USERNAME']:
            error = 'Invalid username'
        elif not check_password_hash(app.config['HASHPASSWORD'],request.form['password']):
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            flash('You were logged in')
            return redirect(url_for('show_entries'))
    return render_template('login.html', error = error)

werkzeug.securityのcheck_password_hashを使用します。入力されたパスワードとcfgファイルに記述されたソルト化されたハッシュを照合させています。

今回色々と調べてみて、この本に興味が湧いてきたので購入してみようかなと思います。

[Flask][DISQUS]Blogコメント欄にDISQUSを導入した

先日、Blogを移行したのですが、コメント欄が未実装ということで、kzfmさんにDISQUS便利だよ!って教えて頂いたのでDISQUSを導入してみました。
このエントリーの下にもコメント欄が表示されていると思います。
なんか結構高機能っぽいのですがまずはシンプルにやって余裕が出てきたら色々な機能を調べてみたいと思います。

[Python][Flask]Blogを移行しました

WordPress→blogmopと使用してきたBlogツールですが、今回Flaskを使用して自作しました。
当初移行する明確な意思などは全然なかったのですが、Flaskのチュートリアルを実施しているうちにFlaskが楽しくなってきてそのまま勢いで作ってしまいました。ついでにサブドメインも切ったりしてますのでRSSなども変わってます。
使用しているエクステンションはFlask-SqlAlchemy1つだけでです。
あとさくらVPSを使っているのですが、今後のことを考えてCentOSからUbuntuに切り替えました。

作ってみてわかったこと

  • Flaskは楽しい
  • でもわからないところをググると日本語の情報は殆ど無い(特にFlask-SqlAlchemy)
  • なので公式ドキュメントをひたすら読むか、メーリングリストをひたすら漁った
  • stackoverflow.comのFlaskタグはかなり世話になった
  • virtualenvがこんなに便利だとは思わなかった
  • FlaskでハマることよりSqlAlchemy関連の理解に苦しんだかも
  • それよりハマったのは実はmod_wsgiとデプロイメント
  • 一番ハマったのはieでレイアウトが崩れること(Web屋さんの気持ちが分かりました)

残処理等

  • コメント欄が未実装
  • ie7で閲覧出来ない、ie8でレイアウトが崩れています。そのうち直します
  • AutoPagerizeみたいな実装をしたい(jQuery?)
  • キャッシュシステムとかどうしよう

謝辞

  • 日本語の情報が少ない中、kzfmさんのblogのエントリーは非常に参考になりました。ありがとうございました。自分は土日に出勤が多い関係で地元の勉強会に行けることはなかなか出来ないのですが、Python関係で何かやることがあれば参加してみたいです。
  • 今まで使用していたblogmopはsetomitsさんが公開しているブログシステムです。blogmopを使いたいがためにLinodeVPS借りたり、Pythonの理解を深めたくてソースコードを読んだりして色々勉強させて頂きました。ありがとうございました。
PAGE TOP