pub struct Cap(/* private fields */);Expand description
Security capability bits for sources, sanitizers, and sinks.
Each bit represents a security-relevant property. The meaning depends on
which role the Cap value is attached to:
- Source: which attack classes this tainted value can potentially
trigger. Sources usually carry
Cap::all()so they match any sink.ENV_VARis an exception — it marks origin rather than reach. - Sanitizer: which attack classes this function strips. A sanitizer
labelled with
HTML_ESCAPEclears the XSS-relevant bits from tainted values that flow through it. - Sink: which capability bits must be present on the incoming tainted
value for a finding to fire. A SQL sink requires
SQL_QUERY.
In practice: a finding fires when a tainted value reaches a sink and
(value_caps & sink_caps) != 0.
Implementations§
Source§impl Cap
impl Cap
Sourcepub const ENV_VAR: Self
pub const ENV_VAR: Self
Taint that originated from an environment variable read. Used as a source-origin marker for env-injection rules.
Sourcepub const HTML_ESCAPE: Self
pub const HTML_ESCAPE: Self
Sanitizer: the value has passed through HTML entity escaping. Strips XSS risk from values that reach HTML output sinks.
Sourcepub const SHELL_ESCAPE: Self
pub const SHELL_ESCAPE: Self
Sanitizer: the value has been shell-argument escaped. Strips command-injection risk before shell sinks.
Sourcepub const URL_ENCODE: Self
pub const URL_ENCODE: Self
Sanitizer: the value has been percent-encoded for use in a URL.
Sourcepub const JSON_PARSE: Self
pub const JSON_PARSE: Self
Sanitizer: the value was parsed through a structured JSON decoder
(as opposed to eval-based or regex parsing).
Sourcepub const FILE_IO: Self
pub const FILE_IO: Self
Sink: file system read or write operation (path traversal, arbitrary file read/write).
Sourcepub const FMT_STRING: Self
pub const FMT_STRING: Self
Sink: format string injection (e.g. printf-family, String.format).
Sourcepub const SQL_QUERY: Self
pub const SQL_QUERY: Self
Sink: SQL query construction. Fires for string-concatenated queries and parameterized-query builders where the query text itself is tainted.
Sourcepub const DESERIALIZE: Self
pub const DESERIALIZE: Self
Sink: unsafe object deserialization (Java ObjectInputStream,
Python pickle, Ruby Marshal, PHP unserialize, etc.).
Sourcepub const SSRF: Self
pub const SSRF: Self
Sink: server-side request forgery. Fires when attacker-controlled data reaches the destination URL of an outbound HTTP request.
Sourcepub const CODE_EXEC: Self
pub const CODE_EXEC: Self
Sink: code or command execution (shell injection, eval, exec,
dynamic require/import, template injection).
Sourcepub const CRYPTO: Self
pub const CRYPTO: Self
Sink: cryptographic operation with a tainted algorithm name or seed (weak-crypto / predictable-randomness patterns).
Sourcepub const UNAUTHORIZED_ID: Self
pub const UNAUTHORIZED_ID: Self
Request-bound, caller-supplied identifier that has not yet been
validated against an ownership/membership check. Used as the
carrier cap for folding auth_analysis into the SSA/taint
engine.
Sourcepub const DATA_EXFIL: Self
pub const DATA_EXFIL: Self
Cross-boundary data-exfiltration: tainted sensitive data flowing
into outbound request bodies, headers, or other payload-bearing
fields of network egress APIs. Distinct from SSRF (attacker
control over the destination URL), DATA_EXFIL fires when the
destination is fixed but attacker-influenced data leaves the
process via the request payload.
Source§impl Cap
impl Cap
Sourcepub const fn bits(&self) -> u16
pub const fn bits(&self) -> u16
Get the underlying bits value.
The returned value is exactly the bits set in this flags value.
Sourcepub const fn from_bits(bits: u16) -> Option<Self>
pub const fn from_bits(bits: u16) -> Option<Self>
Convert from a bits value.
This method will return None if any unknown bits are set.
Sourcepub const fn from_bits_truncate(bits: u16) -> Self
pub const fn from_bits_truncate(bits: u16) -> Self
Convert from a bits value, unsetting any unknown bits.
Sourcepub const fn from_bits_retain(bits: u16) -> Self
pub const fn from_bits_retain(bits: u16) -> Self
Convert from a bits value exactly.
Sourcepub fn from_name(name: &str) -> Option<Self>
pub fn from_name(name: &str) -> Option<Self>
Get a flags value with the bits of a flag with the given name set.
This method will return None if name is empty or doesn’t
correspond to any named flag.
Sourcepub const fn intersects(&self, other: Self) -> bool
pub const fn intersects(&self, other: Self) -> bool
Whether any set bits in other are also set in self.
Sourcepub const fn contains(&self, other: Self) -> bool
pub const fn contains(&self, other: Self) -> bool
Whether all set bits in other are also set in self.
Sourcepub fn remove(&mut self, other: Self)
pub fn remove(&mut self, other: Self)
The intersection of self with the complement of other (&!).
This method is not equivalent to self & !other when other has unknown bits set.
remove won’t truncate other, but the ! operator will.
Sourcepub fn toggle(&mut self, other: Self)
pub fn toggle(&mut self, other: Self)
The bitwise exclusive-or (^) of the bits in self and other.
Sourcepub fn set(&mut self, other: Self, value: bool)
pub fn set(&mut self, other: Self, value: bool)
Call insert when value is true or remove when value is false.
Sourcepub const fn intersection(self, other: Self) -> Self
pub const fn intersection(self, other: Self) -> Self
The bitwise and (&) of the bits in self and other.
Sourcepub const fn union(self, other: Self) -> Self
pub const fn union(self, other: Self) -> Self
The bitwise or (|) of the bits in self and other.
Sourcepub const fn difference(self, other: Self) -> Self
pub const fn difference(self, other: Self) -> Self
The intersection of self with the complement of other (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
Sourcepub const fn symmetric_difference(self, other: Self) -> Self
pub const fn symmetric_difference(self, other: Self) -> Self
The bitwise exclusive-or (^) of the bits in self and other.
Sourcepub const fn complement(self) -> Self
pub const fn complement(self) -> Self
The bitwise negation (!) of the bits in self, truncating the result.
Source§impl Cap
impl Cap
Sourcepub const fn iter(&self) -> Iter<Cap>
pub const fn iter(&self) -> Iter<Cap>
Yield a set of contained flags values.
Each yielded flags value will correspond to a defined named flag. Any unknown bits will be yielded together as a final flags value.
Sourcepub const fn iter_names(&self) -> IterNames<Cap>
pub const fn iter_names(&self) -> IterNames<Cap>
Yield a set of contained named flags values.
This method is like iter, except only yields bits in contained named flags.
Any unknown bits, or bits not corresponding to a contained flag will not be yielded.
Trait Implementations§
Source§impl BitAndAssign for Cap
impl BitAndAssign for Cap
Source§fn bitand_assign(&mut self, other: Self)
fn bitand_assign(&mut self, other: Self)
The bitwise and (&) of the bits in self and other.
Source§impl BitOrAssign for Cap
impl BitOrAssign for Cap
Source§fn bitor_assign(&mut self, other: Self)
fn bitor_assign(&mut self, other: Self)
The bitwise or (|) of the bits in self and other.
Source§impl BitXorAssign for Cap
impl BitXorAssign for Cap
Source§fn bitxor_assign(&mut self, other: Self)
fn bitxor_assign(&mut self, other: Self)
The bitwise exclusive-or (^) of the bits in self and other.
Source§impl<'de> Deserialize<'de> for Cap
impl<'de> Deserialize<'de> for Cap
Source§fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error>
fn deserialize<D: Deserializer<'de>>(d: D) -> Result<Self, D::Error>
Source§impl Extend<Cap> for Cap
impl Extend<Cap> for Cap
Source§fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
fn extend<T: IntoIterator<Item = Self>>(&mut self, iterator: T)
The bitwise or (|) of the bits in each flags value.
Source§fn extend_one(&mut self, item: A)
fn extend_one(&mut self, item: A)
extend_one)Source§fn extend_reserve(&mut self, additional: usize)
fn extend_reserve(&mut self, additional: usize)
extend_one)Source§impl Flags for Cap
impl Flags for Cap
Source§fn from_bits_retain(bits: u16) -> Cap
fn from_bits_retain(bits: u16) -> Cap
Source§fn known_bits(&self) -> Self::Bits
fn known_bits(&self) -> Self::Bits
Source§fn unknown_bits(&self) -> Self::Bits
fn unknown_bits(&self) -> Self::Bits
Source§fn contains_unknown_bits(&self) -> bool
fn contains_unknown_bits(&self) -> bool
true if any unknown bits are set.Source§fn from_bits_truncate(bits: Self::Bits) -> Self
fn from_bits_truncate(bits: Self::Bits) -> Self
Source§fn from_name(name: &str) -> Option<Self>
fn from_name(name: &str) -> Option<Self>
Source§fn iter_names(&self) -> IterNames<Self>
fn iter_names(&self) -> IterNames<Self>
Source§fn iter_defined_names() -> IterDefinedNames<Self>
fn iter_defined_names() -> IterDefinedNames<Self>
Self::FLAGS.Source§fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
fn intersects(&self, other: Self) -> boolwhere
Self: Sized,
other are also set in self.Source§fn contains(&self, other: Self) -> boolwhere
Self: Sized,
fn contains(&self, other: Self) -> boolwhere
Self: Sized,
other are also set in self.Source§fn insert(&mut self, other: Self)where
Self: Sized,
fn insert(&mut self, other: Self)where
Self: Sized,
|) of the bits in self and other.Source§fn toggle(&mut self, other: Self)where
Self: Sized,
fn toggle(&mut self, other: Self)where
Self: Sized,
^) of the bits in self and other.Source§fn intersection(self, other: Self) -> Self
fn intersection(self, other: Self) -> Self
&) of the bits in self and other.Source§fn difference(self, other: Self) -> Self
fn difference(self, other: Self) -> Self
Source§fn symmetric_difference(self, other: Self) -> Self
fn symmetric_difference(self, other: Self) -> Self
^) of the bits in self and other.Source§fn complement(self) -> Self
fn complement(self) -> Self
!) of the bits in self, truncating the result.Source§impl FromIterator<Cap> for Cap
impl FromIterator<Cap> for Cap
Source§fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
fn from_iter<T: IntoIterator<Item = Self>>(iterator: T) -> Self
The bitwise or (|) of the bits in each flags value.
Source§impl IntoIterator for Cap
impl IntoIterator for Cap
Source§impl Sub for Cap
impl Sub for Cap
Source§impl SubAssign for Cap
impl SubAssign for Cap
Source§fn sub_assign(&mut self, other: Self)
fn sub_assign(&mut self, other: Self)
The intersection of self with the complement of other (&!).
This method is not equivalent to self & !other when other has unknown bits set.
difference won’t truncate other, but the ! operator will.
impl Copy for Cap
impl Eq for Cap
impl StructuralPartialEq for Cap
Auto Trait Implementations§
impl Freeze for Cap
impl RefUnwindSafe for Cap
impl Send for Cap
impl Sync for Cap
impl Unpin for Cap
impl UnsafeUnpin for Cap
impl UnwindSafe for Cap
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more