Em đang định thêm chức năng login/comment/… cho cái DNHconsole nhưng vướng ngay đoạn đăng nhập:
Đây là POST, GET của DNH khi log in:
Em không biết làm sao để có được con số khoanh xanh lá cây đó
Mà qua được cái đó mới lấy được cái CSRF TOKEN
Em đang định thêm chức năng login/comment/… cho cái DNHconsole nhưng vướng ngay đoạn đăng nhập:
Đây là POST, GET của DNH khi log in:
Em không biết làm sao để có được con số khoanh xanh lá cây đó
Mà qua được cái đó mới lấy được cái CSRF TOKEN
[URL] http://daynhauhoc.com/session/csrf
[METHOD] GET
[REQUEST HEADER]
Content-Type:application/json
X-Requested-With:XMLHttpRequest
Làm tốt nhé
Wow, csrf bung ra ầm ầm nhưng mà không dùng được ạ hình như csrf nó phải dựa vào thông tin của user (hoặc ít nhất là có liên quan đến con số dạng 1434510080908 kia)
Vì lúc em thử login tài khoản vào firefox xong lấy cái token lấy từ trong network monitor cho vào python thì login được , xong khi em logout ở firefox ra thì cái token đó mất tác dụng trên python luôn
Em xem source html của trang chủ thì thấy cái này có vẻ liên quan (đều là 1434):
Mình dùng 2 requests -> lấy token -> post login thấy bình thường. Bạn thử lại như mình thử xem:
Bước 1 lấy CRFS TOKEN: 1434510080908 -> timestamp dạng milliseconds nhé.
[URL] http://daynhauhoc.com/session/csrf?_=1434510080908
[METHOD] GET
[HEADER]
Content-Type:application/json
X-Requested-With:XMLHttpRequest
[RESPONSE ] nhận được
{
"csrf": "StU+CWQeJ+zWEySUcn2m4Q3sP25CwlDPs62T21PRza8="
}
Bước 2 Login
[URL] http://daynhauhoc.com/session
[METHOD] POST
[REQUEST HEADER]
X-Requested-With:XMLHttpRequest
X-CSRF-Token:StU+CWQeJ+zWEySUcn2m4Q3sP25CwlDPs62T21PRza8=
[REQUEST DATA] (form-data)
login=username|email
password=password
Lưu ý là bước 2 là submit form bình thường, nên phải bỏ content type là json đi nhé.
P/S: Hy vọng không ai dùng cách này để phá hoại forum
Thế là số này 1434510080908
lấy từ giờ của máy client đổi ra milisecond hay là giờ của máy chủ ạ em gà web lắm :
Em đọc bên discourse thấy hình như muốn dùng api thì phải “kinh động” đến admin để tạo api_key nên em mới phải làm kiểu này, nếu dùng được api thì có sẵn thư viện pydiscourse luôn
discourse có cho phép admin tạo API Key đó anh. Nếu anh cung cấp thì bạn ấy thoải mái hơn. nhưng cũng hơi nguy hiểm. Nếu discourse cho phép sử dụng chuẩn OAuth để mọi người viết app thì hay quá.
Alô alô chim sẻ gọi đại bàng, giúp em nốt đoạn timestamp phát em không biết lấy số đấy ở đâu
Mình không chắc, nhưng mình test trên DNH thì đổi timestamp ra thì khớp với thời gian trên máy mình, phút,giây luôn.
Nên bạn cứ thử giờ của client luôn xem. Chú ý request header cho đúng thôi. Thành công thì giữ cookie lại.
API Key chỉ sử dụng các thao tác như tạo, xóa, close, thay đổi topics, categories, users và truy cập thông tin Users, cũng như thông báo thiết lập hệ thống. Nó chưa cho phép OAuth. Shared API key rất nguy hiểm dễ dàng thay đổi hệ thống và quản trị.
P/s: @ltd em đang xây dựng mô hình chát chém gió cho DNH mà ko cần đăng ký mới, lấy thông tin thành viên từ DNH Forum thôi
2 anh có bài tut/video/ebook… nào hay nói về vụ dùng get/post để đăng nhập, csrf với timestamp không, cho em xin để nghiên cứu với, tình hình là cứ làm mò mẫm thế này không ổn (tiếng việt thì càng tốt, không cần quá sâu, chỉ cần cơ bản thôi)
Anh cũng đang nghiên cứu cái này
$.ajax({
url: 'http://daynhauhoc.com/session/csrf',
type: 'get',
dataType: 'json',
cache: false,
success: function (response) {
alert(response.csrf)
}
});
Cái số bác hỏi, get json nó tự sinh ra hay sao ấy, em dùng hay gặp nó mà cũng chả biết ở đâu ra
Em tạo được cái số đấy rồi nhưng đưa vào python thì chưa được, còn chạy bằng add-on firefox httprequester thì ok rồi
Em thấy là toàn bộ quá trình get/post đều không thấy server response cái số đó => số đó được tạo ra trên client => số đó chính là timestamp miliseconds của client => có thể lấy giờ của client để tạo ra số đó
1 là cần API key
2 là cần csrf token
Gửi request cho Discourse team đi bạn
Em đang định đi theo hướng này, nhưng mà không rõ là với điều kiện nào thì csrf token được chấp nhận, em toàn bị BAD CSRF
Em đang mò lúc nữa không được chắc phải đăng bài hỏi anh em thôi
Em dùng cái thư viện requests của python để làm, nhưng do em không hiểu về nguyên lý get/post với mấy cái liên quan như session, cookies, … nên là khả năng gửi request thiếu thành phần gì đó đang nghi ngờ chỗ cookies hoặc session, từ đầu đến giờ em chưa động đến nó. (hình như DNH dựa vào session_id/cookies và timestamp để tạo token)
Ầu yeah!!!, lần đầu tiên đăng nhập thành công trên python, muốn khóc quá
c:\>python a.py
/session/csrf.json?_=1434560923287
http://daynhauhoc.com/session/csrf.json
1434560923287
FA2rK3Zv2PzJSMLCDhJBUBNnFFKPAZKZ41MelCTs9Q8=
{"user_badges":[{"id":5011,"granted_at":"2015-05-17T00:46:54.577Z","badge_id":4,
"user_id":2046,"granted_by_id":-1},{"id":4553,"granted_at":"2015-04-29T04:01:01.
360Z","badge_id":3,"user_id":2046,"granted_by_id":-1},{"id":5712,"granted_at":"2
015-05-26T02:06:19.722Z","post_id":34636,"post_number":3,"badge_id":6,"user_id":
2046,"granted_by_id":-1,"topic_id":7648}],"badges":[{"id":4,"name":"Leader","des
cription":null,"grant_count":14,"allow_title":true,"multiple_grant":false,"icon"
:"fa-user","image":null,"listable":true,"enabled":true,"badge_grouping_id":4,"sy
stem":true,"badge_type_id":1},{"id":3,"name":"Regular","description":null,"grant
_count":27,"allow_title":true,"multiple_grant":false,"icon":"fa-user","image":nu
ll,"listable":true,"enabled":true,"badge_grouping_id":4,"system":true,"badge_typ
e_id":2},{"id":6,"name":"Nice Post","description":null,"grant_count":24,"allow_t
itle":false,"multiple_grant":true,"icon":"fa-certificate","image":null,"listable
":true,"enabled":true,"badge_grouping_id":3,"system":true,"badge_type_id":3}],"b
adge_types":[{"id":1,"name":"Gold","sort_order":9},{"id":2,"name":"Silver","sort
_order":8},{"id":3,"name":"Bronze","sort_order":7}],"users":[{"id":2046,"usernam
e":"thanhmssl10","uploaded_avatar_id":2345,"avatar_template":"/user_avatar/daynh
auhoc.com/thanhmssl10/{size}/2345_1.png"},{"id":-1,"username":"system","uploaded
_avatar_id":1,"avatar_template":"/user_avatar/daynhauhoc.com/system/{size}/1_1.p
ng"}],"topics":[{"id":7648,"title":"[Tß╗öNG Hß╗óP] - C├íc k├¬nh Youtube hay nhß║
Ñt m├á bß║ín n├¬n th─âm ├¡t nhß║Ñt mß╗Öt lß║ºn trong ─æß╗¥i","fancy_title":"[Tß╗
öNG Hß╗óP] - C├íc k├¬nh Youtube hay nhß║Ñt m├á bß║ín n├¬n th─âm ├¡t nhß║Ñt mß╗Öt
lần trong đời","slug":"tong-hop-cac-kenh-youtube-hay-nhat-ma-ban-nen-tham-
it-nhat-mot-lan-trong-doi","posts_count":11}],"user":{"id":2046,"username":"than
hmssl10","uploaded_avatar_id":2345,"avatar_template":"/user_avatar/daynhauhoc.co
m/thanhmssl10/{size}/2345_1.png","name":"Thành Phạm","last_posted_at":"2015-0
6-17T15:59:26.407Z","last_seen_at":"2015-06-17T17:04:58.030Z","bio_raw":"Email:
[email protected]\n[Zít húp][2]\nSkype: thanhmssl10\n\n:blush: :sunglas
ses: :smile:\n\n\n [1]: http://facebook.com/thanhconsl\n [2]: http://github.co
m/thanhmssl10","bio_cooked":"<p>Email: [email protected]<br><a href=\"http:/
/github.com/thanhmssl10\">Zít húp</a><br>Skype: thanhmssl10</p>\n\n<p><img s
rc=\"/images/emoji/emoji_one/blush.png?v=0\" title=\":blush:\" class=\"emoji\" a
lt=\"blush\"> <img src=\"/images/emoji/emoji_one/sunglasses.png?v=0\" title=\":
sunglasses:\" class=\"emoji\" alt=\"sunglasses\"> <img src=\"/images/emoji/emoji
_one/smile.png?v=0\" title=\":smile:\" class=\"emoji\" alt=\"smile\"></p>","crea
ted_at":"2015-03-11T15:02:12.934Z","website":"http://","profile_background":"/up
loads/default/3273/406d7176adedfc2e.png","card_background":"/uploads/default/327
3/406d7176adedfc2e.png","can_edit":false,"can_edit_username":false,"can_edit_ema
il":false,"can_edit_name":false,"stats":[{"action_type":4,"count":78,"id":null},
{"action_type":5,"count":761,"id":null},{"action_type":6,"count":412,"id":null},
{"action_type":1,"count":1625,"id":null},{"action_type":2,"count":897,"id":null}
,{"action_type":7,"count":33,"id":null},{"action_type":9,"count":43,"id":null},{
"action_type":11,"count":35,"id":null}],"can_send_private_messages":false,"can_s
end_private_message_to_user":false,"bio_excerpt":"Email: [email protected]<b
r><a href=\"http://github.com/thanhmssl10\">Zít húp</a><br>Skype: thanhmssl1
0<br>\n\n[blush] [sunglasses] [smile]<br>","trust_level":4,"moderator":false,"a
dmin":false,"title":null,"badge_count":15,"custom_fields":{},"pending_count":0,"
invited_by":null,"custom_groups":[],"featured_user_badge_ids":[5011,4553,5712],"
card_badge":null}}
Đúng như dự đoán, “thủ phạm” là thằng cookies , bổ sung thêm vào câu trả lời của bác @mrphu3074
Bước 1: lấy CRFS TOKEN: 1434510080908 -> timestamp dạng milliseconds nhé. (lấy từ time của client)
[URL] http://daynhauhoc.com/session/csrf?_=1434510080908
[METHOD] GET
[HEADER]
Content-Type:application/json
X-Requested-With:XMLHttpRequest
[RESPONSE ] nhận được
{
"csrf": "StU+CWQeJ+zWEySUcn2m4Q3sP25CwlDPs62T21PRza8="
}
Nhận cookie từ server response về
Bước 2: Login
[URL] http://daynhauhoc.com/session
[METHOD] POST
[REQUEST HEADER]
X-Requested-With:XMLHttpRequest
X-CSRF-Token:StU+CWQeJ+zWEySUcn2m4Q3sP25CwlDPs62T21PRza8=
[REQUEST DATA] (form-data)
login=username|email
password=password
Gửi lại cookie về cho server