Casa Branca adverte contra a utilização destas populares linguagens de programação
Uma agência governamental dos EUA decretou que os programadores devem usar linguagens seguras em termos de memória, como Rust e Java, ao invés de C e C++. Mas por que é que elas são melhores e isso realmente importa?
O que é que a Casa Branca está a dizer?
Numa declaração, o Gabinete do Diretor Cibernético Nacional (ONCD - Office of the National Cyber Director) da Casa Branca alertou os programadores de software a adotarem linguagens de programação com memória segura, como Rust.
O ONCD afirmou:
Nós, como nação, temos a capacidade - e a responsabilidade - de reduzir a superfície de ataque no ciberespaço e impedir que classes inteiras de erros de segurança entrem no ecossistema digital, mas isso significa que precisamos de enfrentar o difícil problema de mudar para linguagens de programação com memória segura.
Muitas das piores vulnerabilidades de segurança de sempre tiveram como causa principal problemas com a segurança da memória. As linguagens de baixo nível mais antigas dão aos programadores muito poder, mas isso aumenta o risco de um código com erros causar graves repercussões.
Independentemente disso, a utilização de linguagens com segurança de memória - como Rust, Python e JavaScript - tem vindo a aumentar. É provável que o ONCD esteja a fazer este anúncio porque as linguagens menos seguras, como o C, existem há tanto tempo que o seu código está agora enraizado na infraestrutura e em grande parte do software que utilizamos diariamente.
Como funcionam as linguagens inseguras?
O código inseguro nem sempre parece assustador ou mesmo complicado. Veja este exemplo de um simples programa em C:
#include <stdio.h> int main (void) { int arr[3] = { 0, 0, 0 }; printf("%d\n", arr[3]); return 0; } |
Este é um exemplo clássico de um bug que pode levar a um ataque de buffer overflow. O programador esqueceu-se que os arrays em C (e na maioria das outras linguagens) começam no index zero, o que significa que o primeiro elemento está em arr[0]. Tentar aceder a arr[3] é, portanto, um erro, mas que o C permite:
O valor em arr[3] é um endereço de memória válido, como qualquer outro, apenas não pertence ao array. Qualquer valor poderia ser armazenado lá, e as consequências de o aceder ou de o escrever podem gerar um crash do programa ou um incidente de segurança mais catastrófico. Muitos hackers ao longo da história exploraram estes bugs.
Como funciona o código nas linguagens com segurança de memória?
Numa linguagem com memória segura como Rust, o mesmo problema simplesmente não existe. Aqui está o mesmo programa, em Rust:
fn main() { let arr: [u32; 5] = [0;3]; println!("{}", arr[3]); } |
Embora esse código seja sintaticamente válido, o Rust não conseguirá compilá-lo:
O compilador explica o problema e recusa-se a produzir um executável. O Rust simplesmente não permite que execute esse código.
O Rust tem muitos outros recursos além desses, para ajudar a protegê-lo. Este inclui recursos como apontadores inteligentes para lidar com a gestão de memória automaticamente e evitar a "desreferência" de apontadores nulos.
Todas as linguagens de programação têm um objetivo, pelo que deve ter cuidado com os conselhos para evitar absolutamente qualquer uma, mesmo que venham de um Presidente. Embora possa optar por se especializar numa determinada linguagem, é sempre útil aprender uma variedade, para expandir as suas opções.
Leia também:
Macbook Air M3 bom para programar?
Depende…
Não é só Rust que não permite executar o programa se o código tiver erros.
Os EUA agora querem ditar em que línguas de programação deve-se usar?! Eu programo na linguagem que eu quiser. Não admito que os EUA ou outro país de fossa venha dizer o que posso ou não fazer X(
Já te disseram milhares de vezes para deixares de programar em ASM mas tu insistes…
Não sei programar em ASM mas sei programar em dark basic 😛
Não conhecia esse Dark Basic …
É verdade. O gemini da Google até se recusa a dar exemplos de código C++ a menores de idade. Faz muito bem, não é uma linguagem segura. Há que proteger os menores.
Os EUA podem e devem ir roê-lo…
Amigo Rui Jorge, dizer que Python e JavaScript são memory safe… vá lá vai…
Lá por parecer que o programador não tem de se preocupar com a memória, tal não significa que sejam seguras, aliás, JavaScript más práticas são quase sinónimos.
Mesmo Rust, se um programador se esforçar, pode criar uma falha de segurança com má gestão da memória, mas neste caso, é já preciso algum esforço.
Mas com JavaScript, são tremoços.
Enfim mais do mesmo dos controladores do mundo, depois de mais um buraco de segurança andam a atirar areia para os olhos do povo a desviar a atenção do verdadeiro problema.
O problema nao é tanto a linguagem em si , sao as praticas de programação, poucos seguem praticas de programacao segura por falta de conhecimento ou para ter menos trabalho.
E Java nao tem a menor condição de substituir c e c++ , parece piada isso, e desde quando Java é seguro? É uma das linguagens que mais possuem incidentes/CVE de segurança.
Acho que qualquer linguagem de programação tem prós e contras; nenhuma delas é 100% segura, tudo depende de quem está ao teclado.
Trata-se de uma declaração macarrónica, one size fits all, que não vai ser tida em conta em muitos cenários. O C e C++ são intencionalmente linguagens minimalistas, pois favorecem o espaço e o desempenho face ao resto.
São para ser usadas onde apropriado. O software por elas imllementado pode não ser praticável mudar para outra lingua devido ao esforço e o custo que isso representa.
Eu adoro programar C++, mas é preciso ter o mindset correcto.
O problema de fundo não é a linguagem per si, mas sim o objecto entre a cadeira e o teclado.
Aconselho vivamente ao autor dessa declaração para meditar um pouco.