2010-04-29 28 views
6

Tôi đã có một trang web PHP hoàn toàn tùy chỉnh với rất nhiều cuộc gọi cơ sở dữ liệu. mã dưới đây xuất hiện trong hàng chục trang PHP tôitiêm tấn công (Tôi nghĩ rằng tôi đã được bảo vệ!) <? Php/**/eval (base64_decode (ở khắp mọi nơi

<?php /**/ eval(base64_decode(big string of code.... 

tôi đã khá cẩn thận về các cuộc gọi SQL của tôi và như vậy, họ đang tất cả ở định dạng này:.

$query = sprintf("UPDATE Sales SET `Shipped`='1', `Tracking_Number`='%s' WHERE ID='%s' LIMIT 1 ;", 
mysql_real_escape_string($trackNo), 
mysql_real_escape_string($id)); 
$result = mysql_query($query); 
mysql_close(); 

Đối với hồ sơ , Tôi hiếm khi sử dụng mysql_close() vào cuối mặc dù đó chỉ xảy ra là mã tôi nắm lấy.Tôi không thể nghĩ ra bất kỳ nơi mà tôi d không sử dụng mysql_real_escape_string(), (mặc dù tôi chắc chắn có thể có một cặp vợ chồng. Tôi sẽ sớm tìm kiếm để tìm hiểu). Cũng không có nơi nào người dùng có thể đặt trong HTML tùy chỉnh hoặc bất kỳ thứ gì. Trên thực tế, hầu hết các trang có thể truy cập người dùng, nếu họ sử dụng các cuộc gọi SQL, hầu như chắc chắn là SELECT * FROM các trang sử dụng GET hoặc POST, tùy thuộc.

Rõ ràng là tôi cần tăng cường bảo mật, nhưng tôi chưa bao giờ có một cuộc tấn công như thế này và tôi không tích cực những gì tôi nên làm. Tôi đã quyết định đặt giới hạn cho tất cả các yếu tố đầu vào của mình và xem xét xem liệu tôi có bị mất một số mysql_real_escape_string ở đâu đó không. Bất kỳ ai khác có bất cứ đề nghị?

Ngoài ra, loại mã này làm gì? Tại sao nó lại ở đó?

+0

Sản lượng đó có ở đầu ra của tập lệnh PHP của bạn hoặc trong chính tệp không? – Gumbo

+0

Đó là tất cả trong các tập tin ... – Cyprus106

+2

Nếu nó nằm trong các tệp thì đó không phải là tệp SQL injection. Bằng cách nào đó các tệp PHP của bạn đã bị xâm phạm. –

Trả lời

5

Như một vấn đề của thực tế, SQL injection là không phải là duy nhất loại tấn công máy chủ của bạn có thể bị ảnh hưởng.

Và hình thức này không giống SQL injection.

Hầu hết thời gian chỉ là một con ngựa trojan tại máy tính của bạn, ăn cắp mật khẩu FTP.

để xem mã thực tế, thay thế eval bằng echo.Nhưng tôi nghi ngờ nó có bất kỳ điều gì thú vị

3

Một số lời khuyên nhanh chóng:

  • Sử dụng các kiểu dữ liệu thích hợp trước khi bạn các biến số như intval cho các số trong truy vấn của bạn
  • Sử dụng mysql_real_escape_string cho các chuỗi trong các truy vấn của bạn
  • Sử dụng prepared statements

Resource:

See SQL Injection guide on php.net

+3

Anh ấy không sử dụng eval. Đó là những gì cuộc tấn công tấn công vào các trang của anh ấy. –

+0

@Marc B: hmm là vậy, cảm ơn vì điều đó :) – Sarfraz

+0

Có, được sử dụng các câu lệnh đã chuẩn bị. Họ cũng có thể phản đối các hàm mysql_ ngu ngốc. – ryeguy

1

Tôi sẽ xem phần còn lại của máy chủ. MySQL không thể thay đổi/ghi đè lên các tập tin cho bạn. Nó có thể có nó gửi đầu ra cho một tập tin ("SELECT ... INTO OUTFILE ..."), nhưng có một biện pháp an ninh tại chỗ ngăn nó ghi đè lên một tập tin đã tồn tại. Ít nhất, một SQL injection sẽ sửa đổi một số dữ liệu của bạn, hoặc phá hủy một truy vấn để trả lại một kết quả khác với mong đợi.

Kiểm tra ai đó đã xâm nhập vào máy chủ của bạn bằng cách brute buộc tài khoản hệ thống thông qua quét SSH hoặc thậm chí là thỏa hiệp SSH. Nếu bạn đang ở trên một máy chủ chia sẻ, hoàn toàn có thể là một người nào đó trang web của ELSE bị xâm nhập và cuộc tấn công chỉ đơn giản là tiến hành lây nhiễm mọi tệp PHP mà nó có thể tìm thấy.

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