...
host_name = request->get_form_field( 'host' ).
CALL FUNCTION 'FTP_CONNECT'
EXPORTING
USER = user
PASSWORD = password
HOST = host_name
RFC_DESTINATION = 'SAPFTP'
IMPORTING
HANDLE = mi_handle
EXCEPTIONS
NOT_CONNECTED = 1
OTHERS = 2.
...
int rPort = Int32.Parse(Request.Item("rPort"));
...
IPEndPoint endpoint = new IPEndPoint(address,rPort);
socket = new Socket(endpoint.AddressFamily,
SocketType.Stream, ProtocolType.Tcp);
socket.Connect(endpoint);
...
...
char* rPort = getenv("rPort");
...
serv_addr.sin_port = htons(atoi(rPort));
if (connect(sockfd,&serv_addr,sizeof(serv_addr)) < 0)
error("ERROR connecting");
...
...
ACCEPT QNAME.
EXEC CICS
READQ TD
QUEUE(QNAME)
INTO(DATA)
LENGTH(LDATA)
END-EXEC.
...
ServerSocket
Java e usa um número de porta lido de uma solicitação HTTP para criar um soquete.
<cfobject action="create" type="java" class="java.net.ServerSocket" name="myObj">
<cfset srvr = myObj.init(#url.port#)>
<cfset socket = srvr.accept()>
Passing user input to objects imported from other languages can be very dangerous.
final server = await HttpServer.bind('localhost', 18081);
server.listen((request) async {
final remotePort = headers.value('port');
final serverSocket = await ServerSocket.bind(host, remotePort as int);
final httpServer = HttpServer.listenOn(serverSocket);
});
...
func someHandler(w http.ResponseWriter, r *http.Request){
r.parseForm()
deviceName := r.FormValue("device")
...
syscall.BindToDevice(fd, deviceName)
}
String remotePort = request.getParameter("remotePort");
...
ServerSocket srvr = new ServerSocket(remotePort);
Socket skt = srvr.accept();
...
WebView
.
...
WebView webview = new WebView(this);
setContentView(webview);
String url = this.getIntent().getExtras().getString("url");
webview.loadUrl(url);
...
var socket = new WebSocket(document.URL.indexOf("url=")+20);
...
char* rHost = getenv("host");
...
CFReadStreamRef readStream;
CFWriteStreamRef writeStream;
CFStreamCreatePairWithSocketToHost(NULL, (CFStringRef)rHost, 80, &readStream, &writeStream);
...
<?php
$host=$_GET['host'];
$dbconn = pg_connect("host=$host port=1234 dbname=ticketdb");
...
$result = pg_prepare($dbconn, "my_query", 'SELECT * FROM pricelist WHERE name = $1');
$result = pg_execute($dbconn, "my_query", array("ticket"));
?>
...
filename := SUBSTR(OWA_UTIL.get_cgi_env('PATH_INFO'), 2);
WPG_DOCLOAD.download_file(filename);
...
host=request.GET['host']
dbconn = db.connect(host=host, port=1234, dbname=ticketdb)
c = dbconn.cursor()
...
result = c.execute('SELECT * FROM pricelist')
...
def controllerMethod = Action { request =>
val result = request.getQueryString("key").map { key =>
val user = db.getUser()
cache.set(key, user)
Ok("Cached Request")
}
Ok("Done")
}
...
func application(app: UIApplication, openURL url: NSURL, options: [String : AnyObject]) -> Bool {
var inputStream : NSInputStream?
var outputStream : NSOutputStream?
...
var readStream : Unmanaged<CFReadStream>?
var writeStream : Unmanaged<CFWriteStream>?
let rHost = getQueryStringParameter(url.absoluteString, "host")
CFStreamCreatePairWithSocketToHost(kCFAllocatorDefault, rHost, 80, &readStream, &writeStream);
...
}
func getQueryStringParameter(url: String?, param: String) -> String? {
if let url = url, urlComponents = NSURLComponents(string: url), queryItems = (urlComponents.queryItems as? [NSURLQueryItem]) {
return queryItems.filter({ (item) in item.name == param }).first?.value!
}
return nil
}
...
...
Begin MSWinsockLib.Winsock tcpServer
...
Dim Response As Response
Dim Request As Request
Dim Session As Session
Dim Application As Application
Dim Server As Server
Dim Port As Variant
Set Response = objContext("Response")
Set Request = objContext("Request")
Set Session = objContext("Session")
Set Application = objContext("Application")
Set Server = objContext("Server")
Set Port = Request.Form("port")
...
tcpServer.LocalPort = Port
tcpServer.Accept
...
...
lv_uri = request->get_form_field( 'uri' ).
CALL METHOD cl_http_utility=>set_request_uri
EXPORTING
request = lo_request
uri = lv_uri.
...
http
ou https
, como:
...
PageReference ref = ApexPages.currentPage();
Map<String,String> params = ref.getParameters();
HttpRequest req = new HttpRequest();
req.setEndpoint(params.get('url'));
HTTPResponse res = new Http().send(req);
http
ou https
, como:
string url = Request.Form["url"];
HttpClient client = new HttpClient();
HttpResponseMessage response = await client.GetAsync(url);
http
ou https
, como:
char *url = maliciousInput();
CURL *curl = curl_easy_init();
curl_easy_setopt(curl, CURLOPT_URL, url);
CURLcode res = curl_easy_perform(curl);
http
ou https
, como:
...
final server = await HttpServer.bind('localhost', 18081);
server.listen((request) async {
final headers = request.headers;
final url = headers.value('url');
final client = IOClient();
final response = await client.get(Uri.parse(url!));
...
}
http
ou https
, como:
url := request.Form.Get("url")
res, err =: http.Get(url)
...
http
ou https
, como:
String url = request.getParameter("url");
CloseableHttpClient httpclient = HttpClients.createDefault();
HttpGet httpGet = new HttpGet(url);
CloseableHttpResponse response1 = httpclient.execute(httpGet);
http
ou https
, como:
var http = require('http');
var url = require('url');
function listener(request, response){
var request_url = url.parse(request.url, true)['query']['url'];
http.request(request_url)
...
}
...
http.createServer(listener).listen(8080);
...
http
ou https
, como:
val url: String = request.getParameter("url")
val httpclient: CloseableHttpClient = HttpClients.createDefault()
val httpGet = HttpGet(url)
val response1: CloseableHttpResponse = httpclient.execute(httpGet)
http
ou https
, como:
$url = $_GET['url'];
$c = curl_init();
curl_setopt($c, CURLOPT_POST, 0);
curl_setopt($c,CURLOPT_URL,$url);
$response=curl_exec($c);
curl_close($c);
http
ou https
, como:
url = request.GET['url']
handle = urllib.urlopen(url)
http
ou https
, como:
url = req['url']
Net::HTTP.get(url)
http
ou https
, como:
def getFile(url: String) = Action { request =>
...
val url = request.body.asText.getOrElse("http://google.com")
ws.url(url).get().map { response =>
Ok(s"Request sent to $url")
}
...
}
http
ou https
, como:
...
taintedConnectionStr = request->get_form_field( 'dbconn_name' ).
TRY.
DATA(con) = cl_sql_connection=>get_connection( `R/3*` && taintedConnectionStr ).
...
con->close( ).
CATCH cx_sql_exception INTO FINAL(exc).
...
ENDTRY.
...
sethostid(argv[1]);
...
sethostid()
com êxito, usuários sem privilégios podem ser capazes de invocar o programa. O código nesse exemplo permite que a entrada do usuário controle diretamente o valor de uma configuração do sistema. Se um invasor fornece um valor mal-intencionado para a ID de host, o invasor poderá identificar incorretamente a máquina afetada na rede ou causar outro comportamento indesejado.
...
ACCEPT OPT1.
ACCEPT OPT2
COMPUTE OPTS = OPT1 + OPT2.
CALL 'MQOPEN' USING HCONN, OBJECTDESC, OPTS, HOBJ, COMPOCODE REASON.
...
...
<cfset code = SetProfileString(IniPath,
Section, "timeout", Form.newTimeout)>
...
Form.newTimeout
é usado para especificar um tempo limite, um invasor pode ser capaz de preparar um ataque de negação de serviço (DoS) contra o aplicativo especificando um número suficientemente grande.
...
catalog := request.Form.Get("catalog")
path := request.Form.Get("path")
os.Setenv(catalog, path)
...
HttpServletRequest
e a define como o catálogo ativo para um banco de dados Connection
.
...
conn.setCatalog(request.getParamter("catalog"));
...
http.IncomingMessage
e a utiliza para definir sinalizadores adicionais de linha de comando V8.
var v8 = require('v8');
...
var flags = url.parse(request.url, true)['query']['flags'];
...
v8.setFlagsFromString(flags);
...
<?php
...
$table_name=$_GET['catalog'];
$retrieved_array = pg_copy_to($db_connection, $table_name);
...
?>
...
catalog = request.GET['catalog']
path = request.GET['path']
os.putenv(catalog, path)
...
Connection
.
def connect(catalog: String) = Action { request =>
...
conn.setCatalog(catalog)
...
}
...
sqlite3(SQLITE_CONFIG_LOG, user_controllable);
...
Request
e define-a como o catálogo ativo de um banco de dados Connection
.
...
Dim conn As ADODB.Connection
Set conn = New ADODB.Connection
Dim rsTables As ADODB.Recordset
Dim Catalog As New ADOX.Catalog
Set Catalog.ActiveConnection = conn
Catalog.Create Request.Form("catalog")
...
clientaccesspolicy.xml
no host. No entanto, é necessário tomar precauções ao alterar as configurações, pois uma política entre domínios excessivamente permissiva permitirá que aplicativos mal-intencionados se comuniquem com o serviço vítima de modo impróprio, resultando em falsificação, roubo de dados, retransmissão e outros ataques.clientaccesspolicy.xml
usando um caractere curinga para especificar os domínios com os quais o serviço tem permissão para se comunicar.
<allow-from http-request-headers="*">
<domain uri="*"/>
</allow-from>
*
como valor do atributo uri
do elemento do domain
indica que os aplicativos em qualquer domínio podem se conectar ao serviço.
...
v_account = request->get_form_field( 'account' ).
v_reference = request->get_form_field( 'ref_key' ).
CONCATENATE `user = '` sy-uname `'` INTO cl_where.
IF v_account IS NOT INITIAL.
CONCATENATE cl_where ` AND account = ` v_account INTO cl_where SEPARATED BY SPACE.
ENDIF.
IF v_reference IS NOT INITIAL.
CONCATENATE cl_where "AND ref_key = `" v_reference "`" INTO cl_where.
ENDIF.
SELECT *
FROM invoice_items
INTO CORRESPONDING FIELDS OF TABLE itab_items
WHERE (cl_where).
...
SELECT *
FROM invoice_items
INTO CORRESPONDING FIELDS OF TABLE itab_items
WHERE user = sy-uname
AND account = <account>
AND ref_key = <reference>.
"abc` OR MANDT NE `+"
para v_reference e a string '1000' para v_account, a consulta se tornará a seguinte:
SELECT *
FROM invoice_items
INTO CORRESPONDING FIELDS OF TABLE itab_items
WHERE user = sy-uname
AND account = 1000
AND ref_key = `abc` OR MANDT NE `+`.
OR MANDT NE `+`
faz com que a cláusula WHERE
sempre seja avaliada como "true", pois o campo "client" nunca pode ser igual ao literal +, e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM invoice_items
INTO CORRESPONDING FIELDS OF TABLE itab_items.
invoice_items
, independentemente do usuário especificado.
PARAMETERS: p_street TYPE string,
p_city TYPE string.
Data: v_sql TYPE string,
stmt TYPE REF TO CL_SQL_STATEMENT.
v_sql = "UPDATE EMP_TABLE SET ".
"Update employee address. Build the update statement with changed details
IF street NE p_street.
CONCATENATE v_sql "STREET = `" p_street "`".
ENDIF.
IF city NE p_city.
CONCATENATE v_sql "CITY = `" p_city "`".
ENDIF.
l_upd = stmt->execute_update( v_sql ).
"ABC` SALARY = `1000000"
para o parâmetro p_street, o aplicativo permitirá que o banco de dados seja atualizado com o salário revisado!
...
var params:Object = LoaderInfo(this.root.loaderInfo).parameters;
var username:String = String(params["username"]);
var itemName:String = String(params["itemName"]);
var query:String = "SELECT * FROM items WHERE owner = " + username + " AND itemname = " + itemName;
stmt.sqlConnection = conn;
stmt.text = query;
stmt.execute();
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
owner
corresponde ao nome do usuário autenticado no momento.
...
string userName = ctx.getAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
sda = new SqlDataAdapter(query, conn);
DataTable dt = new DataTable();
sda.Fill(dt);
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'); DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
Exemplo 2:Como alternativa, um resultado semelhante pode ser obtido com o SQLite usando o seguinte código:
...
ctx.getAuthUserName(&userName); {
CString query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ request.Lookup("item") + "'";
dbms.ExecuteSQL(query);
...
...
sprintf (sql, "SELECT * FROM items WHERE owner='%s' AND itemname='%s'", username, request.Lookup("item"));
printf("SQL to execute is: \n\t\t %s\n", sql);
rc = sqlite3_exec(db,sql, NULL,0, &err);
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'); DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
ACCEPT USER.
ACCEPT ITM.
MOVE "SELECT * FROM items WHERE owner = '" TO QUERY1.
MOVE "' AND itemname = '" TO QUERY2.
MOVE "'" TO QUERY3.
STRING
QUERY1, USER, QUERY2, ITM, QUERY3 DELIMITED BY SIZE
INTO QUERY
END-STRING.
EXEC SQL
EXECUTE IMMEDIATE :QUERY
END-EXEC.
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itm
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula WHERE seja sempre avaliada como verdadeira, portanto a consulta torna-se logicamente equivalente à seguinte consulta, muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
<cfquery name="matchingItems" datasource="cfsnippets">
SELECT * FROM items
WHERE owner='#Form.userName#'
AND itemId=#Form.ID#
</cfquery>
...
SELECT * FROM items
WHERE owner = <userName>
AND itemId = <ID>;
Form.ID
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para Form.ID
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemId = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário hacker
inserir a string "hacker'); DELETE FROM items; --
" para Form.ID
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'hacker'
AND itemId = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'hacker'
AND itemId = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
final server = await HttpServer.bind('localhost', 18081);
server.listen((request) async {
final headers = request.headers;
final userName = headers.value('userName');
final itemName = headers.value('itemName');
final query = "SELECT * FROM items WHERE owner = '"
+ userName! + "' AND itemname = '"
+ itemName! + "'";
db.query(query);
}
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a cadeia de caracteres "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a cadeia de caracteres "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas seguintes consultas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
rawQuery := request.URL.Query()
username := rawQuery.Get("userName")
itemName := rawQuery.Get("itemName")
query := "SELECT * FROM items WHERE owner = " + username + " AND itemname = " + itemName + ";"
db.Exec(query)
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a cadeia de caracteres "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a cadeia de caracteres "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas seguintes consultas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a cadeia de caracteres "name'; DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três seguintes instruções válidas serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
String userName = ctx.getAuthenticatedUserName();
String itemName = request.getParameter("itemName");
String query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ itemName + "'";
ResultSet rs = stmt.execute(query);
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
Example 1
à plataforma Android.
...
PasswordAuthentication pa = authenticator.getPasswordAuthentication();
String userName = pa.getUserName();
String itemName = this.getIntent().getExtras().getString("itemName");
String query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ itemName + "'";
SQLiteDatabase db = this.openOrCreateDatabase("DB", MODE_PRIVATE, null);
Cursor c = db.rawQuery(query, null);
...
...
var username = document.form.username.value;
var itemName = document.form.itemName.value;
var query = "SELECT * FROM items WHERE owner = " + username + " AND itemname = " + itemName + ";";
db.transaction(function (tx) {
tx.executeSql(query);
}
)
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
$userName = $_SESSION['userName'];
$itemName = $_POST['itemName'];
$query = "SELECT * FROM items WHERE owner = '$userName' AND itemname = '$itemName';";
$result = mysql_query($query);
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não tiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
procedure get_item (
itm_cv IN OUT ItmCurTyp,
usr in varchar2,
itm in varchar2)
is
open itm_cv for ' SELECT * FROM items WHERE ' ||
'owner = '''|| usr || '''' ||
' AND itemname = ''' || itm || '''';
end get_item;
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itm
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula WHERE seja sempre avaliada como verdadeira, portanto a consulta torna-se logicamente equivalente à seguinte consulta, muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
userName = req.field('userName')
itemName = req.field('itemName')
query = "SELECT * FROM items WHERE owner = ' " + userName +" ' AND itemname = ' " + itemName +"';"
cursor.execute(query)
result = cursor.fetchall()
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não tiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
userName = getAuthenticatedUserName()
itemName = params[:itemName]
sqlQuery = "SELECT * FROM items WHERE owner = '#{userName}' AND itemname = '#{itemName}'"
rs = conn.query(sqlQuery)
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.
...
id = params[:id]
itemName = Mysql.escape_string(params[:itemName])
sqlQuery = "SELECT * FROM items WHERE id = #{userName} AND itemname = '#{itemName}'"
rs = conn.query(sqlQuery)
...
SELECT * FROM items WHERE id=<id> AND itemname = <itemName>;
itemName
e aparentemente isso impediu a vulnerabilidade contra a SQL Injection. No entanto, como a Ruby não é uma linguagem de digitação estática, mesmo que nós esperemos que id
seja um número inteiro de algum tipo uma vez que ele é atribuído a partir da entrada do usuário, ele não será necessariamente um número. Se um invasor puder, em vez disso, alterar o valor de id
para 1 OR id!=1--
, uma vez que não há nenhuma verificação de que id
é de fato numérico, a consulta SQL agora se tornará:
SELECT * FROM items WHERE id=1 OR id!=1-- AND itemname = 'anyValue';
SELECT * FROM items WHERE id=1 OR id!=1;
id
for igual a 1 ou não, o que naturalmente, equivale a tudo nessa tabela.
def doSQLQuery(value:String) = Action.async { implicit request =>
val result: Future[Seq[User]] = db.run {
sql"select * from users where name = '#$value'".as[User]
}
...
}
SELECT * FROM users
WHERE name = <userName>
userName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para userName
, a consulta se tornará a seguinte:
SELECT * FROM users
WHERE name = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM users;
users
, independentemente do usuário especificado.owner
corresponde ao nome do usuário autenticado no momento.
...
let queryStatementString = "SELECT * FROM items WHERE owner='\(username)' AND itemname='\(item)'"
var queryStatement: OpaquePointer? = nil
if sqlite3_prepare_v2(db, queryStatementString, -1, &queryStatement, nil) == SQLITE_OK {
if sqlite3_step(queryStatement) == SQLITE_ROW {
...
}
}
...
SELECT * FROM items
WHERE owner = '<userName>'
AND itemname = '<itemName>'
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'); DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
username = Session("username")
itemName = Request.Form("itemName")
strSQL = "SELECT * FROM items WHERE owner = '"& userName &"' AND itemname = '" & itemName &"'"
objRecordSet.Open strSQL, strConnect, adOpenDynamic, adLockOptimistic, adCmdText
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
owner
corresponde ao nome do usuário autenticado no momento.
...
string userName = ctx.getAuthenticatedUserName();
string queryString = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
SimpleQuery<Item> queryObject = new SimpleQuery(queryString);
Item[] items = (Item[])queryObject.Execute(query);
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.owner
corresponde ao nome do usuário autenticado no momento.
...
string userName = ctx.getAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
var items = dataContext.ExecuteCommand<Item>(query);
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'); DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
owner
corresponde ao nome do usuário autenticado no momento.
...
string userName = ctx.GetAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
List items = sess.CreateSQLQuery(query).List();
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
ItemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para ItemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'; DELETE FROM items; --
" para ItemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'; DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
owner
corresponde ao nome do usuário autenticado no momento.
...
string userName = identity.User;
string itemName = apiGatewayProxyRequest.QueryStringParameters['item'];
string statement = $"SELECT * FROM items WHERE owner = '{userName}' AND itemname = '{itemName}'";
var executeStatementRequest = new ExecuteStatementRequest();
executeStatementRequest.Statement = statement;
var executeStatementResponse = await dynamoDBClient.ExecuteStatementAsync(executeStatementRequest);
return displayResults(executeStatementResponse.Items);
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a cadeia de caracteres "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:owner
corresponde ao nome do usuário autenticado no momento.
...
String userName = identity.getUser();
String itemName = apiGatewayProxyRequest.getQueryStringParameters('item');
String statement = String.format("SELECT * FROM items WHERE owner = '%s' AND itemname = '%s'", userName, itemName);
ExecuteStatementRequest executeStatementRequest = new ExecuteStatementRequest();
executeStatementRequest.setStatement(statement);
ExecuteStatementResponse executeStatementResponse = dynamoDBClient.executeStatement(executeStatementRequest);
return displayResults(executeStatementResponse.items());
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a cadeia de caracteres "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:owner
corresponde ao nome do usuário autenticado no momento.
...
string userName = ctx.getAuthenticatedUserName();
string query = "SELECT * FROM items WHERE owner = '"
+ userName + "' AND itemname = '"
+ ItemName.Text + "'";
IDataReader responseReader = new InlineQuery().ExecuteReader(query);
...
SELECT * FROM items
WHERE owner = <userName>
AND itemname = <itemName>;
itemName
não contiver um caractere de aspas simples. Se um invasor com o nome de usuário wiley
inserir a string "name' OR 'a'='a
" para itemName
, a consulta se tornará a seguinte:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name' OR 'a'='a';
OR 'a'='a'
faz com que a cláusula "where" sempre seja avaliada como "true" e, portanto, a consulta torna-se logicamente equivalente à seguinte consulta muito mais simples:
SELECT * FROM items;
items
, independentemente do proprietário especificado.Example 1
. Se um invasor com o nome de usuário wiley
inserir a string "name'); DELETE FROM items; --
" para itemName
, a consulta se transformará nas duas consultas a seguir:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
--'
Example 1
. Se um invasor inserir a string "name'); DELETE FROM items; SELECT * FROM items WHERE 'a'='a
", as três instruções válidas a seguir serão criadas:
SELECT * FROM items
WHERE owner = 'wiley'
AND itemname = 'name';
DELETE FROM items;
SELECT * FROM items WHERE 'a'='a';
...
CALL FUNCTION 'FTP_VERSION'
...
IMPORTING
EXEPATH = p
VERSION = v
WORKING_DIR = dir
RFCPATH = rfcp
RFCVERSION = rfcv
TABLES
FTP_TRACE = FTP_TRACE.
WRITE: 'exepath: ', p, 'version: ', v, 'working_dir: ', dir, 'rfcpath: ', rfcp, 'rfcversion: ', rfcv.
...
string cs="database=northwind;server=mySQLServer...";
SqlConnection conn=new SqlConnection(cs);
...
Console.Writeline(cs);
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
char* path = getenv("PATH");
...
fprintf(stderr, "cannot find exe on path %s\n", path);
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
print(Platform.environment["HOME"]);
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
path := os.Getenv("PATH")
...
log.Printf("Cannot find exe on path %s\n", path)
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
try {
...
} catch (Exception e) {
e.printStackTrace();
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
try {
...
} catch (Exception e) {
String exception = Log.getStackTraceString(e);
Intent i = new Intent();
i.setAction("SEND_EXCEPTION");
i.putExtra("exception", exception);
view.getContext().sendBroadcast(i);
}
...
...
public static final String TAG = "NfcActivity";
private static final String DATA_SPLITTER = "__:DATA:__";
private static final String MIME_TYPE = "application/my.applications.mimetype";
...
TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);
String VERSION = tm.getDeviceSoftwareVersion();
...
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null)
return;
String text = TAG + DATA_SPLITTER + VERSION;
NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
MIME_TYPE.getBytes(), new byte[0], text.getBytes());
NdefRecord[] records = { record };
NdefMessage msg = new NdefMessage(records);
nfcAdapter.setNdefPushMessage(msg, this);
...
$log.log(exception);
try {
...
} catch (e: Exception) {
e.printStackTrace()
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
try {
...
} catch (e: Exception) {
val exception = Log.getStackTraceString(e)
val intent = Intent()
intent.action = "SEND_EXCEPTION"
intent.putExtra("exception", exception)
view.context.sendBroadcast(intent)
}
...
...
companion object {
const val TAG = "NfcActivity"
private const val DATA_SPLITTER = "__:DATA:__"
private const val MIME_TYPE = "application/my.applications.mimetype"
}
...
val tm = Context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val VERSION = tm.getDeviceSoftwareVersion();
...
val nfcAdapter = NfcAdapter.getDefaultAdapter(this)
val text: String = "$TAG$DATA_SPLITTER$VERSION"
val record = NdefRecord(NdefRecord.TNF_MIME_MEDIA, MIME_TYPE.getBytes(), ByteArray(0), text.toByteArray())
val records = arrayOf(record)
val msg = NdefMessage(records)
nfcAdapter.setNdefPushMessage(msg, this)
...
...
NSString* deviceID = [[UIDevice currentDevice] name];
[deviceID writeToFile:@"/dev/stderr" atomically:NO encoding:NSUTF8StringEncoding error:nil];
...
<?php
...
echo "Server error! Printing the backtrace";
debug_print_backtrace();
...
?>
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
begin
log = Logger.new(STDERR)
...
rescue Exception
log.info("Exception: " + $!)
...
end
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa. Naturalmente, outro problema com o Example 1
é resgatar a raiz Exception
em vez de um tipo específico ou erro/exceção, significando que isso capturará todas as exceções, podendo causar outros efeitos colaterais desconsiderados.
...
public struct StderrOutputStream: OutputStreamType {
public static let stream = StderrOutputStream()
public func write(string: String) {fputs(string, stderr)}
}
public var errStream = StderrOutputStream.stream
let deviceID = UIDevice.currentDevice().name
println("Device ID: \(deviceID)", &errStream)
...
...
CALL FUNCTION 'FTP_VERSION'
...
IMPORTING
EXEPATH = p
VERSION = v
WORKING_DIR = dir
RFCPATH = rfcp
RFCVERSION = rfcv
TABLES
FTP_TRACE = FTP_TRACE.
WRITE: 'exepath: ', p, 'version: ', v, 'working_dir: ', dir, 'rfcpath: ', rfcp, 'rfcversion: ', rfcv.
...
try {
...
}
catch(e:Error) {
trace(e.getStackTrace());
}
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.<apex:messages/>
de uma página do Visualforce:
try {
...
} catch (Exception e) {
ApexPages.Message msg = new ApexPages.Message(ApexPages.Severity.FATAL, e.getMessage());
ApexPages.addMessage(msg);
}
try
{
...
}
catch (Exception e)
{
Response.Write(e.ToString());
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
int sockfd;
int flags;
char hostname[1024];
hostname[1023] = '\0';
gethostname(hostname, 1023);
...
sockfd = socket(AF_INET, SOCK_STREAM, 0);
flags = 0;
send(sockfd, hostname, strlen(hostname), flags);
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.SQLCODE
e a mensagem de erro SQlERRMC
associados ao comando SQL que provocou o erro no terminal.
...
EXEC SQL
WHENEVER SQLERROR
PERFORM DEBUG-ERR
SQL-EXEC.
...
DEBUG-ERR.
DISPLAY "Error code is: " SQLCODE.
DISPLAY "Error message is: " SQLERRMC.
...
Example 1
, uma mensagem de erro de banco de dados pode revelar que o aplicativo é vulnerável a um ataque SQL injection. Outras mensagens de erro podem revelar pistas mais indiretas sobre o sistema.
<cfcatch type="Any">
<cfset exception=getException(myObj)>
<cfset message=exception.toString()>
<cfoutput>
Exception message: #message#
</cfoutput>
</cfcatch>
func handler(w http.ResponseWriter, r *http.Request) {
host, err := os.Hostname()
...
fmt.Fprintf(w, "%s is busy, please try again later.", host)
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
protected void doPost (HttpServletRequest req, HttpServletResponse res) throws IOException {
...
PrintWriter out = res.getWriter();
try {
...
} catch (Exception e) {
out.println(e.getMessage());
}
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
try {
...
} catch (Exception e) {
String exception = Log.getStackTraceString(e);
Intent i = new Intent();
i.setAction("SEND_EXCEPTION");
i.putExtra("exception", exception);
view.getContext().sendBroadcast(i);
}
...
...
public static final String TAG = "NfcActivity";
private static final String DATA_SPLITTER = "__:DATA:__";
private static final String MIME_TYPE = "application/my.applications.mimetype";
...
TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);
String VERSION = tm.getDeviceSoftwareVersion();
...
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null)
return;
String text = TAG + DATA_SPLITTER + VERSION;
NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
MIME_TYPE.getBytes(), new byte[0], text.getBytes());
NdefRecord[] records = { record };
NdefMessage msg = new NdefMessage(records);
nfcAdapter.setNdefPushMessage(msg, this);
...
...
dirReader.readEntries(function(results){
...
}, function(error){
$("#myTextArea").val('There was a problem: ' + error);
});
...
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
protected fun doPost(req: HttpServletRequest, res: HttpServletResponse) {
...
val out: PrintWriter = res.getWriter()
try {
...
} catch (e: Exception) {
out.println(e.message)
}
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
try {
...
} catch (e: Exception) {
val exception = Log.getStackTraceString(e)
val intent = Intent()
intent.action = "SEND_EXCEPTION"
intent.putExtra("exception", exception)
view.context.sendBroadcast(intent)
}
...
...
companion object {
const val TAG = "NfcActivity"
private const val DATA_SPLITTER = "__:DATA:__"
private const val MIME_TYPE = "application/my.applications.mimetype"
}
...
val tm = Context.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val VERSION = tm.getDeviceSoftwareVersion();
...
val nfcAdapter = NfcAdapter.getDefaultAdapter(this)
val text: String = "$TAG$DATA_SPLITTER$VERSION"
val record = NdefRecord(NdefRecord.TNF_MIME_MEDIA, MIME_TYPE.getBytes(), ByteArray(0), text.toByteArray())
val records = arrayOf(record)
val msg = NdefMessage(records)
nfcAdapter.setNdefPushMessage(msg, this)
...
NSString *deviceName = [[UIDevice currentDevice] name];
NSString *baseUrl = @"http://myserver.com/?dev=";
NSString *urlString = [baseUrl stringByAppendingString:deviceName];
NSURL *url = [NSURL URLWithString:urlString];
NSURLRequest* request = [NSURLRequest requestWithURL:url cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0];
NSError *err = nil;
NSURLResponse* response = nil;
NSData *data = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&err];
<?php
...
echo "Server error! Printing the backtrace";
debug_print_backtrace();
...
?>
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.PATH_INFO
e SCRIPT_NAME
à página.
...
HTP.htmlOpen;
HTP.headOpen;
HTP.title ('Environment Information');
HTP.headClose;
HTP.bodyOpen;
HTP.br;
HTP.print('Path Information: ' ||
OWA_UTIL.get_cgi_env('PATH_INFO') || '');
HTP.print('Script Name: ' ||
OWA_UTIL.get_cgi_env('SCRIPT_NAME') || '');
HTP.br;
HTP.bodyClose;
HTP.htmlClose;
...
}
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
import cgi
cgi.print_environ()
...
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
response = Rack::Response.new
...
stacktrace = caller # Kernel#caller returns an array of the execution stack
...
response.finish do |res|
res.write "There was a problem: #{stacktrace}"
end
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
def doSomething() = Action { request =>
...
Ok(Html(Properties.osName)) as HTML
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
let deviceName = UIDevice.currentDevice().name
let urlString : String = "http://myserver.com/?dev=\(deviceName)"
let url : NSURL = NSURL(string:urlString)
let request : NSURLRequest = NSURLRequest(URL:url)
var err : NSError?
var response : NSURLResponse?
var data : NSData = NSURLConnection.sendSynchronousRequest(request, returningResponse: &response, error:&err)
Response
:
...
If Err.number <>0 then
Response.Write "An Error Has Occurred on this page!<BR>"
Response.Write "The Error Number is: " & Err.number & "<BR>"
Response.Write "The Description given is: " & Err.Description & "<BR>"
End If
...
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
CALL FUNCTION 'FTP_VERSION'
...
IMPORTING
EXEPATH = p
VERSION = v
WORKING_DIR = dir
RFCPATH = rfcp
RFCVERSION = rfcv
TABLES
FTP_TRACE = FTP_TRACE.
WRITE: 'exepath: ', p, 'version: ', v, 'working_dir: ', dir, 'rfcpath: ', rfcp, 'rfcversion: ', rfcv.
...
try {
...
}
catch(e:Error) {
trace(e.getStackTrace());
}
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
try {
...
} catch (Exception e) {
System.Debug(LoggingLevel.ERROR, e.getMessage());
}
string cs="database=northwind;server=mySQLServer...";
SqlConnection conn=new SqlConnection(cs);
...
Console.Writeline(cs);
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
char* path = getenv("PATH");
...
fprintf(stderr, "cannot find exe on path %s\n", path);
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
EXEC CICS DUMP TRANSACTION
DUMPCODE('name')
FROM (data-area)
LENGTH (data-value)
END-EXEC.
...
<cfscript>
try {
obj = CreateObject("person");
}
catch(any excpt) {
f = FileOpen("c:\log.txt", "write");
FileWriteLine(f, "#excpt.Message#");
FileClose(f);
}
</cfscript>
final file = await File('example.txt').create();
final raf = await file.open(mode: FileMode.write);
final data = String.fromEnvironment("PASSWORD");
raf.writeString(data);
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
path := os.Getenv("PATH")
...
log.Printf("Cannot find exe on path %s\n", path)
Example 1
, o caminho de pesquisa pode implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e o nível de cuidado que os administradores dedicaram à configuração do programa.
protected void doPost (HttpServletRequest req, HttpServletResponse res) throws IOException {
...
PrintWriter out = res.getWriter();
try {
...
} catch (Exception e) {
out.println(e.getMessage());
}
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
try {
...
} catch (Exception e) {
String exception = Log.getStackTraceString(e);
Intent i = new Intent();
i.setAction("SEND_EXCEPTION");
i.putExtra("exception", exception);
view.getContext().sendBroadcast(i);
}
...
...
public static final String TAG = "NfcActivity";
private static final String DATA_SPLITTER = "__:DATA:__";
private static final String MIME_TYPE = "application/my.applications.mimetype";
...
TelephonyManager tm = (TelephonyManager)Context.getSystemService(Context.TELEPHONY_SERVICE);
String VERSION = tm.getDeviceSoftwareVersion();
...
NfcAdapter nfcAdapter = NfcAdapter.getDefaultAdapter(this);
if (nfcAdapter == null)
return;
String text = TAG + DATA_SPLITTER + VERSION;
NdefRecord record = new NdefRecord(NdefRecord.TNF_MIME_MEDIA,
MIME_TYPE.getBytes(), new byte[0], text.getBytes());
NdefRecord[] records = { record };
NdefMessage msg = new NdefMessage(records);
nfcAdapter.setNdefPushMessage(msg, this);
...
var http = require('http');
...
http.request(options, function(res){
...
}).on('error', function(e){
console.log('There was a problem with the request: ' + e);
});
...
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
try {
...
} catch (e: Exception) {
e.printStackTrace()
}
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
try {
...
} catch (e: Exception) {
Log.e(TAG, Log.getStackTraceString(e))
}
...
...
NSString* deviceID = [[UIDevice currentDevice] name];
NSLog(@"DeviceID: %@", deviceID);
...
deviceID
à lista de padrões do usuário e os armazena imediatamente em um arquivo plist.
...
NSString* deviceID = [[UIDevice currentDevice] name];
[defaults setObject:deviceID forKey:@"deviceID"];
[defaults synchronize];
...
Example 2
armazena informações do sistema contidas no dispositivo móvel em um arquivo plist desprotegido que é armazenado nesse dispositivo. Embora muitos desenvolvedores confiem em arquivos plist como um local de armazenamento seguro para todos os tipos de dados, convém não confiar neles implicitamente, particularmente nos casos em que as informações do sistema e a privacidade são uma grande preocupação, pois esses arquivos podem ser lidos por qualquer usuário que venha a se apossar do dispositivo.
<?php
...
echo "Server error! Printing the backtrace";
debug_print_backtrace();
...
?>
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
try:
...
except:
print(sys.exc_info()[2])
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
...
begin
log = Logger.new(STDERR)
...
rescue Exception
log.info("Exception: " + $!)
...
end
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa. Naturalmente, outro problema com o Example 1
é resgatar a raiz Exception
em vez de um tipo específico ou erro/exceção, significando que isso capturará todas as exceções, podendo causar outros efeitos colaterais desconsiderados.
...
println(Properties.osName)
...
Example 1
, as informações vazadas podem implicar informações sobre o tipo de sistema operacional, os aplicativos instalados no sistema e a quantidade de cuidado que os administradores dedicaram à configuração do programa.
let deviceName = UIDevice.currentDevice().name
...
NSLog("Device Identifier: %@", deviceName)
ASPError
a um depurador de scripts, como o Microsoft Script Debugger:
...
Debug.Write Server.GetLastError()
...
EnableSensitiveDataLogging
como true
, o que permite que dados de aplicativos usados em comandos de banco de dados sejam incluídos em mensagens de log e de exceção.
...
services.AddDbContext<ApplicationDbContext>(options => {
options.UseSqlServer(_configuration.GetConnectionString("ApplicationDbConnection"));
options.EnableSensitiveDataLogging(true);
});
...
log4j.properties
faz com que todas as consultas sejam registradas no nível info
.
...
log4j.logger.net.sf.hibernate.type=info
log4j.logger.net.sf.hibernate.tool.hbm2ddl=info
...
usrname
no objeto da sessão HTTP antes de verificar se o usuário foi autenticado.
usrname = request.Item("usrname");
if (session.Item(ATTR_USR) == null) {
session.Add(ATTR_USR, usrname);
}
usrname
no objeto da sessão HTTP antes de verificar se o usuário foi autenticado.
usrname = request.getParameter("usrname");
if (session.getAttribute(ATTR_USR) != null) {
session.setAttribute(ATTR_USR, usrname);
}
var GetURL = function() {};
GetURL.prototype = {
run: function(arguments) {
...
arguments.completionFunction({ "URL": document.location.href });
}
...
};
var ExtensionPreprocessingJS = new GetURL;
usrname
no objeto da sessão HTTP antes de verificar se o usuário foi autenticado.
val usrname: String = request.getParameter("usrname")
if (session.getAttribute(ATTR_USR) != null) {
session.setAttribute(ATTR_USR, usrname)
}
webview
do host.
#import <MobileCoreServices/MobileCoreServices.h>
- (IBAction)done {
...
[self.extensionContext completeRequestReturningItems:@[untrustedItem] completionHandler:nil];
}
usrname
e armazena o respectivo valor na sessão HTTP DB antes de verificar se o usuário foi autenticado.
...
IF (OWA_COOKIE.get('usrname').num_vals != 0) THEN
usrname := OWA_COOKIE.get('usrname').vals(1);
END IF;
IF (v('ATTR_USR') IS null) THEN
HTMLDB_UTIL.set_session_state('ATTR_USR', usrname);
END IF;
...
username
no objeto da sessão HTTP antes de verificar se o usuário foi autenticado.
uname = request.GET['username']
request.session['username'] = uname
webview
do host.
import MobileCoreServices
@IBAction func done() {
...
self.extensionContext!.completeRequestReturningItems([unstrustedItem], completionHandler: nil)
}
usrname
no objeto da sessão HTTP antes de verificar se o usuário foi autenticado.
...
Dim Response As Response
Dim Request As Request
Dim Session As Session
Dim Application As Application
Dim Server As Server
Dim usrname as Variant
Set Response = objContext("Response")
Set Request = objContext("Request")
Set Session = objContext("Session")
Set Application = objContext("Application")
usrname = Request.Form("usrname")
If IsNull(Session("ATTR_USR")) Then
Session("ATTR_USR") = usrname
End If
...
Read()
e os métodos relacionados que fazem parte de várias classes System.IO
. A maioria dos erros e eventos incomuns no .NET é resultante do lançamento de uma exceção. (Esta é uma das vantagens de .NET em relação a linguagens como a C: Exceções facilitam para os programadores refletirem sobre o que pode dar errado.) Porém, as classes de fluxo e leitor não consideram incomum nem excepcional quando apenas uma pequena quantidade de dados torna-se disponível. Essas classes simplesmente adicionam a pequena quantidade de dados ao buffer de retorno e definem o valor de retorno como o número de bytes ou caracteres lidos. Não há garantia de que a quantidade de dados retornados seja igual à quantidade de dados solicitados.Read()
e outros métodos de E/S e garantam o recebimento da quantidade de dados esperada.Read()
. Se um invasor puder criar um arquivo menor, o programa reciclará o restante dos dados do usuário anterior e lidará com eles como se pertencessem ao invasor.
char[] byteArray = new char[1024];
for (IEnumerator i=users.GetEnumerator(); i.MoveNext() ;i.Current()) {
string userName = (string) i.Current();
string pFileName = PFILE_ROOT + "/" + userName;
StreamReader sr = new StreamReader(pFileName);
sr.Read(byteArray,0,1024);//the file is always 1k bytes
sr.Close();
processPFile(userName, byteArray);
}
char buf[10], cp_buf[10];
fgets(buf, 10, stdin);
strcpy(cp_buf, buf);
fgets()
for retornado, buf
conterá uma cadeia de caracteres com terminação nula de comprimento 9 ou menor. Porém, se um erro de E/S ocorrer, fgets()
não estabelecerá uma terminação nula para buf
. Além disso, se o final do arquivo for atingido antes que todos os caracteres sejam lidos, fgets()
será retornado sem gravar nada em buf
. Em ambas as situações, fgets()
sinaliza que algo inusitado aconteceu retornando NULL
, mas, nesse código, o aviso não será percebido. A falta de um terminador nulo em buf
pode resultar em um estouro de buffer na chamada subsequente para strcpy()
.read()
e os métodos relacionados que fazem parte de várias classes java.io
. A maioria dos erros e eventos incomuns em Java é resultante do lançamento de uma exceção. (Esta é uma das vantagens de Java em relação a linguagens como a C: Exceções facilitam para os programadores refletirem sobre o que pode dar errado.) Porém, as classes de fluxo e leitor não consideram incomum nem excepcional quando apenas uma pequena quantidade de dados torna-se disponível. Essas classes simplesmente adicionam a pequena quantidade de dados ao buffer de retorno e definem o valor de retorno como o número de bytes ou caracteres lidos. Não há garantia de que a quantidade de dados retornados seja igual à quantidade de dados solicitados.read()
e outros métodos de E/S para garantir o recebimento da quantidade de dados esperada.read()
. Se um invasor puder criar um arquivo menor, o programa reciclará o restante dos dados do usuário anterior e lidará com eles como se pertencessem ao invasor.
FileInputStream fis;
byte[] byteArray = new byte[1024];
for (Iterator i=users.iterator(); i.hasNext();) {
String userName = (String) i.next();
String pFileName = PFILE_ROOT + "/" + userName;
FileInputStream fis = new FileInputStream(pFileName);
fis.read(byteArray); // the file is always 1k bytes
fis.close();
processPFile(userName, byteArray);
}
read()
. Se um invasor puder criar um arquivo menor, o programa reciclará o restante dos dados do usuário anterior e lidará com eles como se pertencessem ao invasor.
var fis: FileInputStream
val byteArray = ByteArray(1023)
val i: Iterator<*> = users.iterator()
while (i.hasNext()) {
val userName = i.next() as String
val pFileName: String = PFILE_ROOT.toString() + "/" + userName
val fis = FileInputStream(pFileName)
fis.read(byteArray) // the file is always 0k bytes
fis.close()
processPFile(userName, byteArray)
}
int a = (Int32)i + (Int32)j;
a seguir lança uma exceção sem tratamento e trava o aplicativo em tempo de execução.
class Program
{
static int? i = j;
static int? j;
static void Main(string[] args)
{
j = 100;
int a = (Int32)i + (Int32)j;
Console.WriteLine(i);
Console.WriteLine(j);
Console.WriteLine(a);
}
}
aN
ebN
, mas no caso padrão, o programador definiu acidentalmente o valor de aN
duas vezes.
switch (ctl) {
case -1:
aN = 0; bN = 0;
break;
case 0:
aN = i; bN = -i;
break;
case 1:
aN = i + NEXT_SZ; bN = i - NEXT_SZ;
break;
default:
aN = -1; aN = -1;
break;
}
Finalize()
para StreamReader
chama Close()
eventualmente, mas não há nenhuma garantia de quanto tempo será necessário antes que o método Finalize()
seja invocado. Na verdade, não há nenhuma garantia de que Finalize()
nunca será invocado. Em um ambiente muito ativo, isso pode fazer com que a VM use todos os seus identificadores de arquivo disponíveis.Exemplo 2: Em condições normais, o código a seguir executa uma consulta de banco de dados, processa os resultados retornados pelo banco de dados e fecha o objeto
private void processFile(string fName) {
StreamWriter sw = new StreamWriter(fName);
string line;
while ((line = sr.ReadLine()) != null)
processLine(line);
}
SqlConnection
alocado. Porém, se ocorrer uma exceção durante a execução do SQL ou o processamento dos resultados, o objeto SqlConnection
não será fechado. Se isso acontecer com frequência suficiente, o banco de dados ficará sem cursores disponíveis e não poderá executar mais consultas SQL.
...
SqlConnection conn = new SqlConnection(connString);
SqlCommand cmd = new SqlCommand(queryString);
cmd.Connection = conn;
conn.Open();
SqlDataReader rdr = cmd.ExecuteReader();
HarvestResults(rdr);
conn.Connection.Close();
...
int decodeFile(char* fName)
{
char buf[BUF_SZ];
FILE* f = fopen(fName, "r");
if (!f) {
printf("cannot open %s\n", fName);
return DECODE_FAIL;
} else {
while (fgets(buf, BUF_SZ, f)) {
if (!checkChecksum(buf)) {
return DECODE_FAIL;
} else {
decodeBlock(buf);
}
}
}
fclose(f);
return DECODE_SUCCESS;
}
CALL "CBL_CREATE_FILE"
USING filename
access-mode
deny-mode
device
file-handle
END-CALL
IF return-code NOT = 0
DISPLAY "Error!"
GOBACK
ELSE
PERFORM write-data
IF ws-status-code NOT = 0
DISPLAY "Error!"
GOBACK
ELSE
DISPLAY "Success!"
END-IF
END-IF
CALL "CBL_CLOSE_FILE"
USING file-handle
END-CALL
GOBACK
.
New()
estabelece uma nova conexão com o daemon de log do sistema. Faz parte do pacote log.syslog. Cada gravação para o gravador retornado envia uma mensagem de log com a prioridade fornecida (uma combinação do recurso e gravidade do syslog) e a tag de prefixo. Em um ambiente ocupado, isso pode fazer com que o sistema use todos os seus soquetes.Exemplo 2: Nesse exemplo, o método
func TestNew() {
s, err := New(syslog.LOG_INFO|syslog.LOG_USER, "the_tag")
if err != nil {
if err.Error() == "Unix syslog delivery error" {
fmt.Println("skipping: syslogd not running")
}
fmt.Println("New() failed: %s", err)
}
}
Dial()
do pacote net/smtp
retorna um novo cliente conectado a um servidor SMTP no localhost. Os recursos de conexão são alocados, mas nunca são liberados chamando a função Close()
.
func testDial() {
client, _ := smtp.Dial("127.0.0.1")
client.Hello("")
}
Arena.ofConfined()
não está fechado.
...
Arena offHeap = Arena.ofConfined()
MemorySegment str = offHeap.allocateUtf8String("data");
...
//offHeap is never closed
BEGIN
...
F1 := UTL_FILE.FOPEN('user_dir','u12345.tmp','R',256);
UTL_FILE.GET_LINE(F1,V1,32767);
...
END;