Security News
Research
Data Theft Repackaged: A Case Study in Malicious Wrapper Packages on npm
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
#zerkel An adzerk-based query-ish language.
###Language Zerkel provides primitive integer and string literals, identifiers, sets, and a selection of boolean operators:
operator/type | comment | examples |
---|---|---|
integers | syntax | 42 , -7 |
strings | syntax | "foo" , "C:\\\\Windows\\System32" , `"^(foo |
variables | syntax | count , _foo_bar , $location.postalCode |
. | property accessor | $location.postalCode , foo.bar.baz |
[, ] | set construction | [42, "foo"] |
(, ) | expression grouping | x < 100 AND (y < 50 OR z < 10) |
= | foo = 42 | |
<> | not equal | foo <> "bar" |
=~ | regex match | `foo =~ "^(some |
!~ | not regex match | `foo !~ "^(some |
> | foo > 42 | |
< | foo < 42 | |
>= | foo >= 42 | |
<= | foo <= 42 | |
AND | foo = 42 AND bar < 100 | |
OR | foo = 42 OR bar < 100 | |
NOT | NOT (bar =~ "^foo") | |
LIKE | wildcard match | foo LIKE "ba*" |
CONTAINS | set membership / substring | ["foo", "bar"] CONTAINS "foo" , "foobar" CONTAINS "foo" |
Thus, queries may be written like:
count > 43 and (user = "bob" or user = "alice")
keywords contains "awesome"
All operators are available in upper and lowercase forms.
###Demo
Check out the live Zerkel scratchpad demo app and try some zerkel queries in your browser.
###Usage Queries can executed in coffeescript/javascript using the zerkel module, like so:
zerkel = require 'zerkel'
query = 'count > 43 and (user = "bob" or user = "alice")'
matchFn = zerkel.compile query
matchFn {count: 50, user: 'bob'} # true
matchFn {count: 12, user: 'alice'} # false
matchFn {count: 50, user: 'George Michael'} # terribly, unfortunately, false
You can also access properties on passed in objects, like so:
zerkel = require 'zerkel'
query = 'user.location = "open field west of a white house"'
matchFn = zerkel.compile query
matchFn {user: {name: 'bob', location: 'open field west of a white house'}} # true
matchFn {user: {name: 'alice', location: 'middle earth'}} # false
###Gzip
Set the parser.MIN_GZIP_SIZE
to a number, and if the length of the compiled
JavaScript is greater than that it will be gzipped and base64 encoded, with
GZ:
prepended. The zerkel#makePredicate
function will unzip automatically
as necessary.
parser = require 'zerkel-parser'
parser.MIN_GZIP_SIZE = 50
parser.parse 'foo = 42' # _helpers['getIn'](_env, 'foo')==42'
parser.parse '[42, 43] contains foo' # GZ:H4sIAAAAAAAAA9OINjHSMTGOVVODMvQy81JSK/zTNOIzUnMKUouKo9XTU0s889RjNeJT88p0FNTT8vPVNTUV7GwVDDQBm8CsuD8AAAA=
###License Apache 2.0
FAQs
A compiler for the zerkel language
The npm package zerkel receives a total of 11 weekly downloads. As such, zerkel popularity was classified as not popular.
We found that zerkel demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 4 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Research
The Socket Research Team breaks down a malicious wrapper package that uses obfuscation to harvest credentials and exfiltrate sensitive data.
Research
Security News
Attackers used a malicious npm package typosquatting a popular ESLint plugin to steal sensitive data, execute commands, and exploit developer systems.
Security News
The Ultralytics' PyPI Package was compromised four times in one weekend through GitHub Actions cache poisoning and failure to rotate previously compromised API tokens.