Chào mừng bạn đến với Diễn đàn sinh viên Hoa Sen.
+ Trả lời bài viết
Hiện kết quả từ 1 tới 2 của 2
  1. #1

    123... trốn
    Tên Thật
    Trần Hoàng Hiệp
    Lớp
    QL071
    Trường
    Hoa Sen University
    Đến từ
    Vũng Tàu
    Bài gửi
    678
    Tham gia ngày
    Jan 2005
    Thanks
    145
    Thanked 901 Times in 357 Posts

    Mặc định Cross-Site Request Forgeries (CSRF) – Ném đá giấu tay

    Lỗi bảo mật này thường ít được chú ý đến, nhưng thiệt hại của nó cũng không kém so với XSS. Cơ chế của lỗi này là đánh lừa người dùng thực hiện việc họ không muốn như xóa dữ liệu, tài khoản, gửi nội dung sai mục đích... Lỗi này thường được kết hợp với XSS để đánh lừa dễ dàng hơn. Ví dụ ta có một form gửi bài viết mới: post-csrf.php

    <?php
    if(isset($_GET['title'])) {
    file_put_contents('new_post.txt', $_GET['title']."\n", FILE_APPEND);
    echo 'OK';
    } else {
    ?>
    <form action="">
    Title: <input type="text" name="title"/>
    &nbsp;<input type="submit" value="Post">
    </form>
    <?php } ?>
    Sau đó, chèn đoạn mã sau đây vào trang nào đó:

    <img src="http://localhost/post-csrf.php?title=test" />
    Khi chạy trang có chèn mã trên, nội dung sẽ được lưu trữ trong new_post.txt. Đối với ví dụ này thì không có gì nguy hiểm, nhưng nếu website có đường dẫn để xóa bài viết hay tài khoản nào đó:

    <img src="http://localhost/post-csrf.php?type=post&id_delete=123" />
    Nếu không bảo mật, bài viết thứ 123 sẽ bị xóa khi bất kỳ ai truy cập vào trang có đoạn mã trên. Nếu là một trang bán hàng nào đó, có URL: buy.php?item=1 thì rất có thể người dùng sẽ bị thiệt hại tài sản khi đặt hàng những thứ mà mình không có chủ ý mua. Hoặc nguy hiểm hơn, hacker có thể đánh lừa người quản trị truy cập trang có mã độc để xóa hay sửa đổi dữ liệu của website mà người quản trị không hay biết. Website sẽ chứa đầy spam nếu phần xử lý gửi bài viết của diễn đàn, trang tin chưa xử lý lỗi CSRF!!!

    Cách chống CSRF
    - Lỗi này một phần là do bạn đã sử dụng phương thức $_GET để thực hiện các hành động. Cách tốt nhất là hãy chuyển sang $_POST và hãy quên đi $_REQUEST. - Dùng token để xác thực hành động và nên tạo một trang xác nhận khi thực hiện hành động nào đó.


    Mã:
    1. set_magic_quotes_runtime(FALSE);
    2. $token = md5(uniqid(rand(), TRUE));
    3. $_SESSION['token'] = $token;
    4. $_SESSION['token_timestamp'] = time();
    5. ?>
    6. <form action="" method="POST">
    7. <input type="hidden" name="token" value="<?=$token?>" />
    8. Item: <input type="text" name="item_id" />&nbsp;<input type="submit" value="Post">
    9. </form>
    10. <?php
    11. if(isset($_POST['item_id']) && !empty($_POST['item_id'])) {
    12. if (isset($_POST['token']) && isset($_SESSION['token']) && $_POST['token'] == $_SESSION['token'])
    13. {
    14. $token_limit = time() - $_SESSION['token_timestamp'];
    15. if ($token_limit <= 300) {
    16. // Quá hạn thời gian
    17. } else {
    18. // Hành động hợp lệ
    19. }
    20. }
    21. }
    Đoạn mã trên tạo một token và lưu nó vào trong Session tại thời điểm người dùng duyệt trang này, như vậy sẽ không thể thực hiện hành động lúc nào cũng được.
    Tạo trang xác nhận: Bạn hãy để ý trang Yahoo 360, khi xóa blog nào đó, bạn sẽ bấm vào liên kết GET, lúc đó mới chuyển qua trang xác nhận và hành động xóa được thực hiện bằng POST, cách này khá an toàn và thân thiện.

    ****************Hãy cùng chia sẻ với bạn bè bằng cách ****************

    Copy đường link dưới đây gửi đến nick yahoo bạn bè!

    Thanks nếu bạn thấy hay ^^!
    I'm Pinky's Husband ^^!
    Quy định về chữ ký: http://www.sinhvienhoasen.com/forum/...ad.php?t=13396. Đề nghị các Admin, Smod thực hiện...

  2. #2

    123... trốn
    Tên Thật
    Trần Hoàng Hiệp
    Lớp
    QL071
    Trường
    Hoa Sen University
    Đến từ
    Vũng Tàu
    Bài gửi
    678
    Tham gia ngày
    Jan 2005
    Thanks
    145
    Thanked 901 Times in 357 Posts

    Mặc định

    Đoạn mã trên tạo một token và lưu nó vào trong Session tại thời điểm người dùng duyệt trang này, như vậy sẽ không thể thực hiện hành động lúc nào cũng được.
    Tạo trang xác nhận: Bạn hãy để ý trang Yahoo 360, khi xóa blog nào đó, bạn sẽ bấm vào liên kết GET, lúc đó mới chuyển qua trang xác nhận và hành động xóa được thực hiện bằng POST, cách này khá an toàn và thân thiện.
    Mã:
    <input type="hidden" name="item_id" value="<?=$_GET['delete_id']?>" />
    Tạo tên trang ngẫu nhiên theo thủ thuật nào đó mà bạn nghĩ ra, có thể là thời gian lúc xem trang, tên của tài khoản được cộng trừ, cắt ghép sao cho không thể đoán ra. Mỗi liên kết thực hiện hành động là mỗi liên kết khác nhau tại các thời điểm và hacker khó mà sử dụng liên kết đó để lừa người dùng. http://localhost/post-csrf.php?type=...cure=kHfgyjshH
    Ngoài ra còn có một kỹ thuật Iframe Post bằng cách dùng iframe để qua mặt cách dùng POST khi thực hiện hành động. Vì vậy, để an toàn hơn nữa, nên lọc các thẻ iframe có trong trang! Cũng có thể khắc phục phần nào bằng cách đặt đoạn javascript chuyển trang mở trong iframe sau vào trang xác nhận hành động, nó sẽ chuyển về trang chủ nếu trang được mở trong một iframe:

    Mã:
    1. if(top != self) {
    2. top.location.href = 'http://domain_name.com/action_demo.php';
    3. }
    Để an chắc chắn hơn nữa, bạn có thể kết hợp thêm Captcha (Completely Automated Public Turing test to tell Computers and Humans Apart - en.wikipedia.org/wiki/Captcha, captchas.net) tại trang xác nhận hành động.
    Thanks nếu bạn thấy hay ^^!
    I'm Pinky's Husband ^^!
    Quy định về chữ ký: http://www.sinhvienhoasen.com/forum/...ad.php?t=13396. Đề nghị các Admin, Smod thực hiện...


 

Chủ đề tương tự

  1. Trả lời: 0
    Bài cuối: 06-04-2010, 03:29 PM
  2. CSRF Attack Technical and Security
    By ICT in forum Học tập
    Trả lời: 5
    Bài cuối: 06-07-2009, 11:27 PM
  3. [Request] cr@ck IDManager 5.1.5 !!!
    By Frjday13th in forum Soft Request
    Trả lời: 1
    Bài cuối: 25-12-2008, 06:11 PM
  4. Request
    By yuuchan in forum Manga
    Trả lời: 10
    Bài cuối: 10-11-2007, 07:42 PM

Quyền viết bài

  • Bạn không thể gửi chủ đề mới
  • Bạn không thể gửi trả lời
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình