Mã Python nguy hiểm

Mức độ an toàn của ứng dụng phụ thuộc rất ít vào lựa chọn ngôn ngữ. Bạn có thể lập trình an toàn bằng các ngôn ngữ dễ bị tổn thương và làm những việc rất không an toàn với các ngôn ngữ được thiết kế để bảo mật

Các nhà phát triển ngày nay gánh vác trách nhiệm lớn––họ không chỉ giải quyết một số thách thức lớn nhất của ngành mà còn được mong đợi cung cấp những giải pháp đó với tiêu chuẩn bảo mật và chất lượng mã cao nhất ngay từ đầu

Câu chuyện thành công được nêu bật ở đây chứng minh lý do tại sao các công cụ phân tích mã tĩnh lại cần thiết trong nỗ lực này nhằm cải thiện Chất lượng mã và Bảo mật mã cũng như cách chúng đã giúp cộng đồng Python xác định [và sửa] các lỗi và lỗ hổng trong một số dự án Python nguồn mở nổi bật

Nợ kỹ thuật ngày càng tăng và nỗi sợ hãi về bảo mật

Với sự phát triển nhanh chóng của các ứng dụng Python mở rộng các trường hợp sử dụng mới và sáng tạo, các nhóm phát triển ngày càng có nhiều áp lực phải đáp ứng thời hạn và phân phối các dự án đúng tiến độ––đôi khi, độ tin cậy, khả năng bảo trì và bảo mật của mã bị gác lại. Làm như vậy không chỉ làm tăng nợ kỹ thuật dài hạn mà còn có thể để lại lỗ hổng bảo mật trong cơ sở mã

Với mục tiêu chung là nắm bắt các vấn đề sớm hơn trong quá trình phát triển [cách tiếp cận lệch trái], các nhóm thường quan tâm đến các công cụ mới và nâng cao để xem liệu chúng có phù hợp với quy trình làm việc của họ không, có đủ trực quan và giúp họ đạt được mục tiêu này không. Rất may, có nhiều công cụ và quy trình công việc có thể hỗ trợ người dùng Pythons. Trên thực tế, hệ sinh thái Python được làm phong phú với các công cụ phân tích tĩnh và xơ [e. g. PyLint, Flake8, Bandit, PyT, PySa, v.v. kể tên một số] và hầu hết các nhà phát triển Python đã sử dụng một hoặc nhiều trong số này

Tại SonarSource, chúng tôi rất quen thuộc với nhu cầu [và khó khăn] của cộng đồng nhà phát triển. Trên thực tế, chúng tôi tin rằng chỉ các nhà phát triển mới có thể có tác động bền vững đến Chất lượng mã & Bảo mật mã. Đó là lý do tại sao chúng tôi xây dựng các bộ phân tích mã nguồn mở và mã thương mại––SonarLint, SonarCloud, SonarQube, với sứ mệnh trao quyền cho các nhóm giải quyết các vấn đề mã hóa trong quy trình công việc hiện tại của họ. Trong nhiệm vụ này, chúng tôi cũng gánh vác trách nhiệm lớn, nghĩa là cung cấp phản hồi chính xác và khả thi, đồng thời tìm ra các vấn đề với độ chính xác cao [i. e. giảm thiểu dương tính giả]

Trong phần tiếp theo, chúng ta sẽ nói về cách phân tích các dự án Python mã nguồn mở phổ biến không chỉ là cơ hội để cung cấp phản hồi tuyệt vời cho những người đóng góp mà còn giúp liên tục cải thiện chất lượng và độ chính xác của các công cụ phân tích mã tĩnh––một vòng kết nối hợp tác, thúc đẩy cộng đồng

Các lỗi và lỗ hổng được phát hiện trong các dự án Python phổ biến

Chúng tôi đã phân tích một số dự án nguồn mở tensorflow, numpy, salt, sentry và biopython với SonarCloud để xác định bất kỳ lỗ hổng nào. Chúng tôi biết rằng các dự án nguồn mở có khả năng hiển thị cao này thường được sử dụng bởi hàng nghìn dự án và quy trình phát triển của chúng bao gồm mọi phương pháp hay nhất––đánh giá mã, phạm vi kiểm tra, sử dụng nhiều công cụ [flake8, pylint, Bandit…]. Chúng tôi đã phân tích các dự án bằng SonarCloud và kết quả khá thú vị. Không cần phải nói, các vấn đề đã được các dự án đó nhanh chóng nhận ra và khắc phục

"Một số điểm [SonarCloud] rất ấn tượng [có thể được thúc đẩy bởi một số suy luận nội tâm và/hoặc loại], không chỉ là khớp mẫu đơn giản mà tôi đã quen với hầu hết hệ sinh thái flake8. "

--- Peter J. Một. Cock - người bảo trì BioPython [bài gốc tại đây]

Nổi bật dưới đây là một vài ví dụ về các dự án được phân tích và các sự cố đã bị các công cụ khác bỏ qua nhưng được SonarCloud gắn cờ. Khi bạn đọc qua những điều đó, sẽ rất thú vị khi không chỉ nghĩ về khả năng của công cụ mà còn coi đó là cơ hội học hỏi để chủ động tránh những cạm bẫy tương tự trong tương lai

lỗi gõ

Ví dụ dưới đây cho thấy sự cố được tìm thấy trên Tensorflow –– một nền tảng mã nguồn mở dành cho máy học do Google phát triển

SonarCloud có một công cụ suy luận kiểu, cho phép nó phát hiện các lỗi kiểu nâng cao. Nó sử dụng mọi bit thông tin mà nó có thể tìm thấy để suy ra loại biến, bao gồm sơ khai Typeshed, bài tập và chú thích loại của bạn. Đồng thời, nó sẽ không phàn nàn nếu bạn không sử dụng chú thích loại và nó được thiết kế để tránh Tích cực sai

Ở đây, phân tích luồng điều khiển là thứ cho phép nó hiểu rằng state_shape là một bộ vì nó được gán cho output_shape[1:] khi output_shape là một tuple. Thuật toán có thể bỏ qua các phép gán list sau này cho output_shape

mã không thể truy cập

Ví dụ dưới đây cho thấy sự cố được tìm thấy trên Sentry –– một thư viện theo dõi lỗi và hiệu suất của Python

Dễ dàng phát hiện mã chết khi nó chỉ sau một câu lệnh return hoặc một câu lệnh raise. Khó hơn một chút khi return có điều kiện. SonarCloud sử dụng biểu đồ luồng điều khiển để phát hiện các trường hợp có nhiều nhánh thoát ngay trước khi đạt được câu lệnh

Các trường sai trong chuỗi được định dạng

Ví dụ dưới đây cho thấy sự cố được tìm thấy trên Dự án muối –– một gói python dành cho tự động hóa theo hướng sự kiện, thực thi tác vụ từ xa và quản lý cấu hình

Việc tham chiếu tên trường hoặc chỉ mục sai trong khi định dạng chuỗi là điều khá phổ biến. Pylint và Flake8 có các quy tắc phát hiện sự cố này với chuỗi ký tự, nhưng chúng bỏ sót lỗi khi chuỗi định dạng nằm trong một biến

ngoại lệ chưa được nâng cao

Ví dụ dưới đây cho thấy sự cố được tìm thấy trên Biopython –– một công cụ tính toán sinh học và tin học

Khi chúng tôi xem lại mã, chúng tôi thường xem xét các lớp, biến và các biểu tượng có ý nghĩa khác và thường quên kiểm tra các chi tiết nhỏ, chẳng hạn như "có từ khóa tăng trước ngoại lệ của tôi không". SonarCloud phân tích toàn bộ dự án để trích xuất phân cấp loại. Nó phát hiện khi các ngoại lệ tùy chỉnh bị loại bỏ, không chỉ các ngoại lệ dựng sẵn

So sánh vô nghĩa

Ví dụ dưới đây cho thấy sự cố được tìm thấy trên Numpy –– một thư viện tính toán số cho các mảng và ma trận lớn nhiều chiều. SonarCloud có nhiều quy tắc phát hiện mã không hợp lý. So sánh các loại không tương thích với == sẽ không bao giờ thất bại, nhưng nó sẽ luôn trả về Sai hoặc Đúng nếu bạn sử dụng output_shape[1:]0. Ở đây chúng ta có thể thấy một vấn đề vì output_shape[1:]1 trả về một bộ

Đây chỉ là một vài ví dụ và bạn có thể tìm thấy tất cả các sự cố đã được người bảo trì dự án gắn cờ và khắc phục trên các dự án github riêng lẻ – tensorflow, numpy, salt, Sentry và biopython

Hướng dẫn đúng ở đúng nơi và đúng lúc

Xây dựng và duy trì phần mềm tuyệt vời liên quan đến nhiều nhóm sử dụng nhiều công cụ và điều quan trọng là trao quyền cho các nhóm bằng các công cụ cung cấp hướng dẫn phù hợp vào đúng thời điểm và địa điểm

SonarLint, SonarQube và SonarCloud có thể hỗ trợ các nhà phát triển Python thực hiện tốt công việc của họ bằng cách

  • Phân tích mã tự động bắt đầu từ IDE, thông qua quy trình đánh giá mã, cho đến quy trình triển khai
  • Phát hiện một loạt các vấn đề về Chất lượng Mã và Bảo mật Mã sớm hơn trong chu kỳ phát triển
  • Giúp các nhóm 'Làm sạch khi bạn viết mã' để mã mới được phân phối có tiêu chuẩn bảo mật và chất lượng cao nhất, đồng thời giảm nợ kỹ thuật dài hạn

Để nhanh chóng phát hiện các vấn đề khi bạn viết mã trong IDE của mình, SonarLint [mã nguồn mở và hoàn toàn miễn phí] có sẵn từ thị trường IDE được lựa chọn www. sonarlint. tổ chức/

SonarQube và SonarCloud lần lượt là các giải pháp tại chỗ và đám mây, giúp các dự án phát hiện lỗi, lỗ hổng, mùi mã và các điểm nóng bảo mật trong các nền tảng kho lưu trữ mã của bạn [chẳng hạn như GitLab, GitHub, Azure DevOps hoặc Bitbucket] cho phép các nhóm chỉ hợp nhất ở mức độ cao . Chúng hoàn toàn miễn phí cho bất kỳ dự án mã nguồn mở nào. Bạn có thể dùng thử tại www. sonarqube. com hoặc www. đám mây định vị. com

Nếu bạn tò mò về những lỗi hoặc lỗ hổng bảo mật nào có thể ẩn trong kho lưu trữ mã Python của mình, thì hãy tiếp tục và phân tích dự án của bạn giống như chúng tôi đã thực hiện trong các ví dụ trước đây. Đây là một cơ hội tuyệt vời để củng cố hệ thống nhà phát triển của bạn và nắm bắt các vấn đề sớm hơn. Trong quá trình đó, bạn cũng có thể nhận ra đó là một cơ hội học hỏi thú vị và khám phá ra những phương pháp hay nhất và/hoặc những kiểu nguy hiểm mà bạn có thể không biết

Dòng mã Python nguy hiểm nhất là gì?

Dòng mã nguy hiểm nhất là " sudo rm -rf * --no-preserve-root / ".

Mã Python có nguy hiểm không?

Tóm lại, Python là một ngôn ngữ lập trình khá an toàn nhưng nó cũng có những rủi ro [và những điểm cần cải thiện]. Sử dụng thời gian của bạn để tìm hiểu về Python để tìm hiểu về các mối lo ngại về an toàn liên quan đến việc sử dụng nó và đảm bảo các quy trình bảo vệ dữ liệu thích hợp được áp dụng.

Bạn có thể viết phần mềm độc hại bằng Python không?

Xét cho cùng, phần mềm độc hại được viết bằng Python phổ biến trong thế giới hoang dã này và nhiều phần mềm chống vi-rút không phát hiện ra nó. Python thường được sử dụng để tạo các cửa hậu cho phép kẻ tấn công tải lên và thực thi mã tùy ý trên máy bị nhiễm.

Python có phải là một ngôn ngữ nghiêm túc không?

"- Python là một ngôn ngữ nghiêm túc , nhưng nó là một công cụ có vị trí của nó. Bạn có thể sử dụng nó để xây dựng các nguyên mẫu nhanh, nhưng đó không phải là ngôn ngữ có mức độ mạnh mẽ mà bạn muốn nếu bạn giao dịch hàng tỷ đô la. " Không giống như Python, C++ có một trình biên dịch tĩnh giúp bạn sửa các lỗi của mình trong quá trình thực hiện.

Chủ Đề