2011-07-13 32 views
9

Tôi đã lướt những ngày này và đã biết về SQL INJECTION ATTACK. tôi đã cố gắng thực hiện trên máy tính địa phương của tôi biết làm thế nào điều này có thể làm như vậy mà tôi có thể ngăn chặn nó trong hệ thống của tôi ...php sql injection

i đã viết mã như thế này Mã

PHP:

if(count($_POST) > 0){ 

     $con = mysql_connect("localhost","root","") or die(mysql_error()); 
    mysql_select_db('acelera',$con) or die(mysql_error()); // 
    echo $sql = 'SELECT * FROM acl_user WHERE user_email = "'.$_POST['email'].'" AND user_password = "'.$_POST['pass'].'"'; 
    $res_src = mysql_query($sql); 
    while($row = mysql_fetch_array($res_src)){ 
     echo "<pre>";print_r($row);echo "</pre>"; 
    } 
} 

HTML mã sản phẩm:

<html> 
<head></head> 
<body> 

EMAIL : <input type="text" name="email" id="email" /><br /> 
    PASWD : <input type="text" name="pass" id="pass" /><br /> 
    <input type="submit" name="btn_submit" value="submit email pass" /> 
     </body> 
</html> 

bởi mã này nếu tôi cung cấp cho đầu vào như " OR ""=" tiêm sau đó sql nên được thực hiện. nhưng không hoạt động bình thường. trong dữ liệu bài tôi có thêm dấu gạch chéo nếu tôi cung cấp cho đầu vào ở trên trong lĩnh vực mật khẩu.

có thể bất kỳ một chỉ cho tôi cách thực sự SQL INJECTION ATTACK thể được thực hiện? (Mã sẽ đáng hơn)

+0

> trong dữ liệu bài viết tôi có dấu gạch chéo bổ sung. Hãy thử để thiết lập magic_qoutes_qpc để tắt – RiaD

Trả lời

9

Bạn có thể có báo giá ảo thuật kích hoạt. Kiểm tra giá trị trả lại của get_magic_quotes_gpc.

"Trích dẫn kỳ diệu" là một nỗ lực cổ từ PHP đến tự động kỳ diệu ngăn SQL injection, nhưng trong các phiên bản hiện tại nó đã không được chấp nhận và bạn được khuyến khích sử dụng prepared statements để tránh SQL injection.

Xem here cách tắt chúng để bạn có thể thử nghiệm với SQL injection.

-1

sử dụng:

mysql_real_escape_string($_POST['thing']) 

Tôi cũng xin đề nghị sử dụng PDO hoặc mysqli để kết nối/truy vấn cơ sở dữ liệu của bạn. các lệnh mysql_ cũ là một sự hồi phục đối với PHP3 những cải tiến hiệu suất của trứng thứ hai.

Đây là một tốt (nhưng đơn giản) giới thiệu về cách SQL Injection hoạt động qua PHP/MySQL: http://www.tizag.com/mysqlTutorial/mysql-php-sql-injection.php

+0

Ông không muốn tránh tiêm, ông muốn biết làm thế nào để tiêm hệ thống của mình. – Vache

+0

Ông đang cố gắng để mô phỏng một tiêm SQL, không ngăn chặn nó;) – Jacob

+0

Nó là làm thế nào để làm một tiêm ,, không phải làm thế nào để ngăn chặn nó. – SynerCoder

1

Tôi nghĩ rằng trong magicquotes php.ini của bạn hoặc một cái gì đó giống như nó là một. điều này có nghĩa là các ký tự đặc biệt được tự động thoát.

Trên trang này trong cuốn hướng dẫn php được giải thích làm thế nào để tắt nó đi:

http://www.php.net/manual/en/security.magicquotes.disabling.php

1

Tôi nghĩ rằng bạn sẽ có được dấu gạch chéo bổ sung do báo giá ảo thuật http://ch2.php.net/magic_quotes

Hầu hết các bản cài đặt PHP hiện đại đã biến nó đi, vì vậy bạn không muốn dựa vào đó. Chỉ cần sử dụng mysql_real_escape_string() hoặc, tốt hơn, sử dụng PDO http://ch2.php.net/pdo

1

Tôi đề nghị xem xét Acunetix, hoặc một cái gì đó tương tự và miễn phí như thế này add-on cho firefox:

https://addons.mozilla.org/en-US/firefox/addon/sql-injection/

Đó là nhanh hơn để thử nghiệm chống lại SQL Tiêm và cũng quét tất cả các hình thức/có thể là phương pháp của SQLi mà bạn không biết. Acunetix mở rộng điều này và thử nghiệm cho RFI, XSS, v.v.

Sử dụng mã không hiệu quả.

1

SQL bạn đang cố gắng để tạo nên giống như thế này:

SELECT * FROM acl_user WHERE user_email = "[email protected]" Or 1=1; --" AND user_password = "" 

thử nhập:

[email protected]" Or 1=1; -- 

Là địa chỉ e-mail và bỏ qua những mật khẩu.

- làm cho phần còn lại của câu lệnh bị bỏ qua.

Dưới đây là một số thông tin tốt về vấn đề này: http://php.net/manual/en/security.database.sql-injection.php

+0

Và bạn sẽ làm gì với char trích dẫn thoát? :] – WASD42

+0

@DaveShaw Tại sao 'Hoặc 1 = 1'? 'OR 1' sẽ có hiệu ứng giống hệt nhau. –

2

Như mọi người đã biết - bạn có thể có magic quotes on. Mặc dù đây là một thủ thuật: chức năng này làm cho SQL Injection khó thực hiện hơn, nhưng không hoàn toàn là không thể.

Ngoài ra, ngay cả addslashes() cũng không thể giúp bạn. Kẻ tấn công có thể thử các bộ ký tự nhiều byte và một số thủ thuật khác.

Đây là một bài viết tốt về nó: http://shiflett.org/blog/2006/jan/addslashes-versus-mysql-real-escape-string

Giữ ngắn: nếu bạn sử dụng ký tự đa byte trong môi trường single-byte một số trong số họ sẽ trở thành hai ký tự single-byte - dấu gạch chéo, dấu ngoặc kép, vv

1

thay đổi nó để: Noe nếu bạn nhập mật khẩu như một cái gì đó OR 1 = 1 sau đó nó sẽ gây ra tiêm

<?PHP if(count($_POST) > 0){ 

    $con = mysql_connect("localhost","root","") or die(mysql_error()); 
    mysql_select_db('acelera',$con) or die(mysql_error()); // 
    echo $sql = "SELECT * FROM acl_user WHERE user_email = ".$_POST['email']." AND user_password = ".$_POST['pass']; 
    $res_src = mysql_query($sql); 
    while($row = mysql_fetch_array($res_src)){ 
    echo "<pre>";print_r($row);echo "</pre>"; 
    } 
    } 
    ?> 


    <html> 
    <head></head> 
    <body> 
    <form action="" method="post"> 
    EMAIL : <input type="text" name="email" id="email" /><br /> 
    PASWD : <input type="text" name="pass" id="pass" /><br /> 
    <input type="submit" name="btn_submit" value="submit email pass" /> 
    </form> 
    </body> 
    </html> 
0

làm thế nào để ngăn chặn một SQL injection

1) Lọc đầu vào- Ngừng tin tưởng người dùng của bạn: Mối đe dọa lớn nhất đối với ứng dụng là từ người dùng. Người dùng không cần phải lịch thiệp và ngoan ngoãn như bạn mong đợi. Một số người dùng có ý định thực sự xấu và một số người chỉ đơn giản là cố gắng kiểm tra kỹ năng hacking của họ. Bất kỳ mã nào bạn sẽ viết, viết nó bằng cách sử dụng các thực hành tốt nhất và xem xét các khía cạnh bảo mật của nó. Xác thực mọi trường trong biểu mẫu

2) Sử dụng lớp trình bao bọc cơ sở dữ liệu hoặc PDO - Trình bao bọc cơ sở dữ liệu hoặc PDO (bằng PHP) có thể giảm nguy cơ truy cập trực tiếp các giá trị đầu vào vào cơ sở dữ liệu. Các câu lệnh chuẩn bị có thể được sử dụng cùng với PDO như hình dưới đây.

http://www.itechnicalblog.com/what-is-a-sql-injection-and-how-to-fix-it/

Các vấn đề liên quan