Giữ mật khẩu Fshare không đổi

Screenshot 2014-10-16 06.23.37

1. Sơ đồ làm việc

Khi mật khẩu tài khoản Fshare, thí dụ me@yahoo.com, bị thay đổi, Fshare sẽ gởi email xác nhận về địa chỉ trên. Trong email này có ghi mật khẩu mới nhất, chúng ta sẽ dùng mật khẩu này để đăng nhập vào Fshare.

Để không phải định kỳ kiểm tra email, chúng ta sẽ tạo filter chuyển tiếp email của Fshare về mailgun. Ngay khi nhận được email chuyển tiếp, mailgun sẽ chuyển dữ liệu về RPi và RPi sẽ dùng curl để thực hiện việc đổi mật khẩu về mật khẩu cố định.

Tất cả các bước trên đều thực hiện tự động mỗi khi mật khẩu Fshare bị thay đổi.

2. Cài đặt

2A. Tạo email và route trên mailgun để chuyển dữ liệu về RPi

Tạo một địa chỉ email dành cho fshare, thí dụ fshare@pi.ly-le.info

Screenshot 2014-10-16 07.11.54

Tiếp theo, tạo route để mailgun chuyển dữ liệu về RPi khi có email gởi đến địa chỉ này

Screenshot 2014-10-16 07.21.28

Ở lần đầu cài đặt

Filter Expression: catch_all()
Actions: forward (địa chỉ email thường dùng), thí dụ forward('me@pi.ddns.name')
Actions: forward (ddns của RPi/trang php xử lý data), thí dụ forward('http://pi.ddns.name/chgpwd.php')

Bấm nút +/- để thêm/bớt actions.

Sau khi hệ thống chạy ổn rồi thì sửa lại

Filter Expression: match_recipient (địa chỉ email dùng chuyển tiếp thư đến mailgun), chính là tài khoản Fshare
Actions: forward (ddns của RPi/trang php xử lý data)

2B. Tạo filter chuyển tiếp thư trên Mailserver

Google mail

Trước hết vào Settings – Forwarding and POP/IMAP để thêm địa chỉ chuyển tiếp thư (Add a forwarding address) là fshare@pi.ly-le.info

Tiếp theo vào Settings – Filters – Create a new filter

Screenshot 2014-10-16 06.59.38

Screenshot 2014-10-16 07.41.31

Yahoo mail

  • Bấm lên icon Gear Icon | chọn Settings.
  • Bấm Accounts ở cột bên trái.
  • Bấm Edit bên cạnh”Yahoo account.”
  • Chọn Forward.
  • Nhập địa chỉ email để chuyển tiếp và chọn Store and forward
  • Bấm Save.

3. Xây dựng dòng lệnh curl đổi mật khẩu

Sau khi đăng nhập, chúng ta có thể vào trang đổi mật khẩu https://www.fshare.vn/change_pass.php

Screenshot 2014-10-15 21.25.18

Tương tự như trong bài curl trên RPi, chúng ta tìm được các input sau

<input style="width:200px;" class="field" value="" name="passold" id="passold2" onblur="check_passold();" type="password">   <br>
<input style="width:200px;" class="field" name="passnew" id="passnew" onblur="check_passnew();" value="" type="password"> <br>
<input style="width:200px;" class="field" name="repeat_passnew" id="repeat_passnew" onblur="check_repeat_passnew();" value="" type="password">  <br>
<input class="bt white" name="submit_changepass" value="Gửi" type="submit">
<input class="bt" name="cancel_changepass" value="Hủy" onclick="window.location.href='account.php'" type="button">

Dòng lệnh curl như sau

curl -kL -b cookie.txt -e http://www.fshare.vn/index.php -d "passold=matkhaumoi&passnew=matkhaucodinh&repeat_passnew=matkhaucodinh&submit_changepass=Gửi" https://www.fshare.vn/change_pass.php

4. Tạo trang PHP tiếp nhận dữ liệu từ mailgun và dùng curl gởi yêu cầu thay đổi mật khẩu

Nội dung email xác nhận thay đổi mật khẩu tương tự như sau, trong đó có mật khẩu mới nhất

Screenshot 2014-10-15 21.45.05

Tuy nhiên điều chúng ta quan tâm dữ liệu đã được mailgun phân tích và chuyển cho RPi (thí dụ bằng cách gọi trang http://pi.ddns.name/chgpwd.php), trong đó chúng ta cần $_POST[‘sender’]$_POST[‘body-plain’]

Nội dung file chgpwd.php như sau

<?
$fs_acc = 'me@yahoo.com';//tài khoản fshare
$fs_pwd = 'khongco';//mật khẩu fshare
$fs_support='support@fshare.vn';
//mẫu regular expression tìm mật khẩu
$pw_pat = '/Mật khẩu mới của bạn là : (.+) $/im';
$cookie = 'cookie.txt';
$fshare = 'www.fshare.vn';
//chỉ xử lý thư gởi từ fshare
if ($_POST['sender'] != $fs_support) exit;
if (preg_match($pw_pat, $_POST['body-plain'], $opw)){//tìm thấy mật khẩu mới
    //mật khẩu mới
    $opw = $opw[1];
    if ($opw == $fs_pwd) exit;//mật khẩu không thay đổi, không làm gì!
    //dòng lệnh curl đăng nhập vào fshare
    $curl_login = "curl -kL -c $cookie -b $cookie -e http://$fshare/index.php -d \"login_useremail=$fs_acc&login_password=$opw&url_refe=http://$fshare/index.php&auto_login=1\" https://$fshare/login.php";
    //đăng nhập fshare
    $ret = shell_exec($curl_login);
    if (strpos($ret, 'VIP.gif')===false){
        mail('me@gmail.com', 'Đổi mật khẩu tài khoản FShare', 'Lỗi: Không thể đăng nhập!');
    }
    //dòng lệnh curl đổi mật khẩu
    $curl_chgpwd = "curl -kL -b cookie.txt -e http://$fshare/index.php -d \"passold=$opw&passnew=$fs_pwd&repeat_passnew=$fs_pwd&submit_changepass=Gửi\" https://$fshare/change_pass.php";
    //đổi về mật khẩu cũ
    $ret = shell_exec($curl_chgpwd);
    if (strpos($p, "Thay đổi mật khẩu thành công")===false){
        mail('me@gmail.com', 'Đổi mật khẩu tài khoản FShare', 'Lỗi: Không thể đổi mật khẩu!');
    }
}
?>

Các bước đăng nhập và đổi mật khẩu có thể gặp lỗi (do đường truyền internet hay do FShare trục trặc), khi đó chương trình gởi email báo lỗi về địa chỉ thường dùng để có thể đổi mật khẩu thủ công.

Leave a Comment

Filed under Software

Leave a Reply

Your email address will not be published. Required fields are marked *