Nova postagem

查找

Discussão (0)1
Entre ou crie uma conta para continuar
Pergunta
· Dez. 11, 2024

Multiple %CSP.REST.AccessCheck() Overrides

I have a primary dispatch class that implements %CSP.REST.AccessCheck() for some high level access checks before the route table forwards the request to the implementation classes which also implement %CSP.REST.AccessCheck() for some lower level access checks.  The idea is that we know where we are in the implementation class and what the user is trying to do, so it makes more sense to check some lower level items there rather than trying to parse out the request at the dispatch class.

The problem is the second, implementation level access check is not happening.  My first thought was since I allow access via the higher level dispatch class access check, that the access "carried through", however, looking at %CSP.REST.Page() I see no reason ..AccessCheck() should not fire again.

Method signature: ClassMethod AccessCheck(Output pAuthorized As %Boolean = 0) As %Status

Should I be able to override and implement %CSP.REST.AccessCheck() on every class that extends %CSP.REST?

5 Comments
Discussão (5)1
Entre ou crie uma conta para continuar
Artigo
· Dez. 11, 2024 4min de leitura

Injection SQL - uma ameaça vencida ?

De acordo com o relatório OWASP Top Ten de 2021, um documento de referência na área de segurança de aplicações web, as injeções SQL ocupam a terceira posição entre os riscos mais críticos. Este relatório, disponível em OWASP Top 10: Injection, destaca a gravidade dessa ameaça e a necessidade de implementar medidas de proteção eficazes.

Uma injeção SQL ocorre quando um atacante malicioso consegue inserir código SQL não autorizado em uma consulta enviada a um banco de dados. Esse código, disfarçado nas entradas do usuário, pode então ser executado pelo banco de dados, causando ações indesejáveis como o roubo de dados confidenciais, a modificação ou a exclusão de informações sensíveis, ou ainda a interrupção do funcionamento da aplicação.

O que devemos procurar para evitar a injeção SQL ?

Uma aplicação é vulnerável a ataques quando:

  • Les données fournies par l'utilisateur ne sont pas validées, filtrées ou nettoyées par l'application.
  • Requisições dinâmicas ou chamadas não parametrizadas sem escape sensível ao contexto são usadas diretamente no interpretador.
  • Dados maliciosos são usados nos parâmetros de pesquisa de mapeamento objeto-relacional (ORM) para extrair registros adicionais e sensíveis.
  • Dados maliciosos são usados diretamente ou concatenados. O SQL ou o comando contém a estrutura e os dados maliciosos em requisições dinâmicas, comandos ou procedimentos armazenados.

As injeções mais comuns são SQL, NoSQL, de comando OS, de mapeamento objeto-relacional (ORM), LDAP e Expression Language (EL) ou Object Graph Navigation Library (OGNL). O conceito é idêntico para todos os interpretadores.

Antes de aprofundar as técnicas de prevenção, é crucial compreender como as injeções SQL funcionam.

Atacadores podem explorar entradas de usuário não validadas para injetar código SQL malicioso em uma consulta. Por exemplo, se um usuário pode inserir um valor em um campo de pesquisa e esse valor é inserido diretamente em uma consulta SQL sem validação (por exemplo, set query = "SELECT * FROM Company.Accounts WHERE custID="_custID), um atacante poderia inserir uma cadeia de caracteres como "1 union select * from Company.Accounts" para obter detalhes de todas as contas

Felizmente, o InterSystems IRIS oferece diversos mecanismos para prevenir injeções SQL:

  • Utilisação de parâmetros preparados.O uso de parâmetros preparados é um dos métodos mais eficazes para prevenir injeções SQL. Eles separam a estrutura da consulta dos valores de entrada, impedindo que atacantes injetem código SQL malicioso. Por exemplo, o código
 SET statement = ##class(%SQL.Statement).%New()
 DO statement.%Prepare("SELECT * FROM Library.Book where ID = ?")
 SET rs = statement.%Execute("3 union select * from library.Book")
 DO rs.%Display()

não retorna nada.

Enquanto

 SET statement = ##class(%SQL.Statement).%New()
 DO statement.%Prepare("SELECT * FROM Library.Book where ID = ?")
 SET rs = statement.%Execute("3")
 DO rs.%Display()

retorna a informação :

  • Validação das entradas utilizadas. Validar as entradas utilizadas antes de inserir nas requisições SQL é outra medida importante de prevenção. Utilize as expressões regulares ou as funções de validação apropriadas para verificar a validade dos dados. Por exemplo, se nós utilizarmos o código postal como parâmetro da requisição, devemos verificar que só tem caracteres numéricos e em geral comporta 5 caracteres.
 SET statement = ##class(%SQL.Statement).%New()
 DO statement.%Prepare("SELECT * FROM Post.Address WHERE ZIP = ?")
 READ "Enter ZIP code: ", zip
 if zip?5N {
    SET rs = statement.%Execute(zip)
    DO rs.%Display()
    }

Esse código retorna

  • Utilização de padrões nas descrições de classe. Similar ao ponto anterior, mas permite verificar a entrada ao adicionar novas instâncias.
  • Filtro de caracteres especiais
    • Filtrar os caracteres especiais que podem ser utilizados para injetar código SQL também pode ajudar a prevenir ataques. Utilize funções de filtragem apropriadas para remover ou escapar os caracteres potencialmente perigosos.
  • Utilização de procedimentos armazenados.
    • Procedimentos armazenados são objetos de banco de dados que encapsulam um conjunto de instruções SQL. Utilizando procedimentos armazenados, você pode centralizar a lógica de sua aplicação e reduzir o risco de injeções SQL.
  • Atualização regular dos componentes de software.
    • Certifique-se de atualizar regularmente o InterSystems IRIS e os componentes de software relacionados para beneficiar dos últimos corretivos de segurança.

Em conclusão, as injeções SQL representam uma ameaça significativa à segurança de aplicações web. Ao seguir os métodos de prevenção descritos neste artigo, é possível reduzir consideravelmente o risco de ataques de injeção SQL em suas aplicações InterSystems IRIS. A combinação de diversas técnicas de prevenção é fundamental para garantir a máxima proteção.

Discussão (0)1
Entre ou crie uma conta para continuar
Resumo
· Dez. 11, 2024

InterSystems Community Q&A Monthly Newsletter #43

Top new questions
Can you answer these questions?
#InterSystems IRIS
Listing CONNECTION parameter of tables extending %Library.Persistent
By Andy Stobirski
DICOM Extended Negotiation
By Csaba Gyenge
IKO, webgateways and the DirectoryIndex
By Alexander Rischke
Charting lineage across views and statements
By Benjamin De Boe
Unstable Nginx with "stable" webgateway
By Dmitry Maslennikov
FOUT #5023: Fout in Java Gateway: JDBC Gateway getClob(0,2) errorRemote JDBC error: Bad value for type long :  Sneeuwheide
By Edoeard Kroetkov
How to use order by in Query %DLIST ?
By Steven Henry Suhendra
Smart Factory Starter Pack
By john smith
Anyone having experience running IRIS on Hashicorp Nomad?
By Herman Slagman
Seeking Help: Session-Level Configuration for Delimited Identifiers
By shangc shangc
Foreign Server/Table Help
By Scott Roth
Production "Update" activation which prevents tasks from running
By Moussa SAMB
Admin Portal forbiden
By Thiago Andrade
Embedded SQL - CODE 100
By Patrik Spisak
Issue while compiling code with "cuk" qualifiers on VSC
By Pietro Di Leo
Installing Dockers & IRIS image
By john smith
Creating an Operation to Connect to an OAuth 2.0 Server
By Gayle Congdon
stream.Read() only reading in chunks of 1K
By Norman W. Freeman
Calculate STD DEV with ObjectScript
By Dmitrij Vladimirov
Is there a way to compile all of the *.int routines from a command line and get an output of any compile errors?
By JIM WHEELER
HELP --- When using JDBC to connect to the Iris , SQL statements containing double quotes cannot be executed.
By shang chong
From which IRIS version is the new JDBC driver on github?
By Andreas Schneider
Streamlining Interoperability with Embedded Python in InterSystems IRIS
By Anila Kosaraju
Python installation
By Smythe Smythee
OAuth2 with Microsoft
By Daniel Goerke
AutoParallel feature in SQL not working
By David Satorres
#InterSystems IRIS for Health
Starting Python External language in container generates error
By John McBride
Issue calling methods in jar
By Shashvati Dash
Failing in SDA3 to FHIR when converting HS.SDA3.Appointment.Duration to HS.FHIR.DTL.vR4.Model.Resource.Appointment.minutesDuration
By Shashvati Dash
What settings are needed to send ACKs back and prevent Reset Packets?
By Patty Aguirre-Romero
ERROR #5821: Cannot instantiate query: 'SQLCODE = -146, %msg = Error: '' is an invalid DISPLAY Date value'
By yelena melamed
Git Source Control not tracking CSP changes
By Shanwen Liu
Monitoring - Adding multiple labels to a custom metric
By Claude Mourzelas
OAuth client configuration with Configuration Merge?
By Jani Hurskainen
Production messages visualization
By Dmitrii Baranov
Deploy .cls files to a remote server using scripts/command line
By Dmitrii Baranov
Add InterSystems.Data.IRISClient.dll to Nuget as a package?
By John McBride
How to create a signed JWT
By Oliver Wilms
Special Configuration Required for Webgateway/git-source-control?
By Victor Castanon
#Caché
#Ensemble
#Other
#HealthShare
#43Monthly Q&A fromInterSystems Developers
Pergunta
· Dez. 11, 2024

Listing CONNECTION parameter of tables extending %Library.Persistent

I need to do an audit of Linked tables which are using a specific SQL Gateway connection, and there are many.

This is defined by the parameter CONNECTION contained within the table class which extends Extends %Library.Persistent

Is parameter exposed within a table somewhere?

1 Comment
Discussão (1)1
Entre ou crie uma conta para continuar