Socket
Socket
Sign inDemoInstall

solium-plugin-security

Package Overview
Dependencies
190
Maintainers
1
Versions
5
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

solium-plugin-security

Official Solium Plugin for Security-related lint rules


Version published
Maintainers
1
Weekly downloads
1,762
decreased by-0.28%

Weekly downloads

Readme

Source

The official Security Plugin for Solium

Build Status

This Plugin provides security-focused lint rules for Solium.

The rules have been taken from Consensys' Recommended Smart Contract Practices and Solium's Rule Wishlist.

Installation

NOTE: If you're using Solium v1.0.1 or above, this plugin comes pre-installed as a local dependency and you can skip this section.

npm install -g solium-plugin-security

Usage

NOTE: If you've installed Solium v1.0.1 or above and created soliumrc.json using solium --init, you can skip this step since solium automatically applies the security plugin for you.

Add security to your soliumrc.json's plugins array. Your configuration file should look like:

{
    "extends": "solium:all",
    "plugins": ["security"],
    "rules": {
        ...
    }
}

List of rules

Below are the rules supplied by this plugin and the information on passing options to them and their auto-fixing capabilities.

Some of them aren't always desirable and are therefore disabled by default (marked below as OFF). You should explicitly enable them in your .soliumrc.json.

NameDescriptionOptionsDefaultsFixes
no-throwDiscourage use of 'throw' statement for error flaggingYES
no-tx-originDiscourage use of 'tx.origin' global variable
enforce-explicit-visibilityEncourage user to explicitly specify visibility of functionYES
no-block-membersDiscourage use of members 'blockhash' & 'timestamp' (and alias 'now') of 'block' global variableList of members to warn against["blockhash", "timestamp"]
no-call-valueDiscourage use of .call.value()()
no-assign-paramsDisallow assigning to function parameters
no-fixedDisallow fixed point types
no-inline-assemblyDiscourage use of inline assembly
no-low-level-callsDiscourage the use of low-level functions - call(), callcode() & delegatecall()List of functions to warn against["call", "callcode", "delegatecall"]
no-modify-for-iter-varDiscourage user to modify a for loop iteration counting variable in the loop body
no-sendDiscourage the use of unsafe method 'send'
no-sha3Encourage use of 'keccak256()' over 'sha3()' functionYES
no-unreachable-codeDisallow unreachable code
OFF else-after-elseifEncourage user to use else statement after else-if statement
OFF enforce-loop-boundsEncourage use of loops with fixed bounds
OFF enforce-placeholder-lastEnforce that the function placeholder is the last statement in the modifier
OFF return-at-endDiscourage use of early returns in functions
OFF one-break-per-loopDiscourage use of multiple breaks in while/for/do loops
OFF max-statements-in-funcEnforce upper limit on number of statements inside a functionMaximum number of statements25
OFF no-abstract-funcDiscourage use of abstract functions
OFF no-bit-operationsDisallow bitwise operations
OFF no-continueDiscourage use of 'continue' statement
OFF no-inheritanceDiscourage use of inheritanceDisallow interface inheritance{ "no-interface": false }
OFF no-multiple-inheritanceDiscourage use of multiple inheritanceDisallow interface inheritance{ "no-interface": false }
OFF no-named-paramsDisallow named function parameters
OFF no-named-returnsDiscourage use of named returns in functions
OFF 256-bit-ints-onlyDisallow non-256 bit integers
OFF no-suicide-or-selfdestructDisallow suicide and selfdestruct
OFF no-varDisallow type deduction via var
OFF no-user-defined-modifiersDisallow user-defined modifiers
OFF no-void-returnsDiscourage use of void returns in functions prototypes
OFF no-func-overridingDiscourage function overriding

An example soliumrc.json configuring and applying this plugin is:

{
    "plugins": ["security"],
    "rules": {
        "some-other-solium-rule": 1,
        "security/no-low-level-calls": ["error", ["call", "delegatecall"]],
        "security/no-block-members": [1, ["timestamp"]],
        "security/no-throw": "off"
    }
}

This tells solium to apply the 3 security/ rules with special configuration provided and apply the remaining rules of the plugin with their default configurations. If you want to disable a plugin rule, you have to explicitly disable it inside rules.

Lint normally using solium -d contracts/ or solium -d contracts/ --fix to apply fixes as well.

Developer Setup

  • git clone <URL-of-this-repo>
  • cd solium-plugin-security
  • npm install --dev
  • npm link
  • npm link solium-plugin-security
  • npm test

If you'd also like to use your develop build of this plugin with dev build of Solium, go to Solium's directory and run npm link solium-plugin-security. This will let Solium access your modified plugin instead of its pre-installed security module.

Access Solium's Developer Docs

Roadmap

  • Add automated tests
  • Refine rule enforce-explicit-visibility
  • Add more security rules

Security rules to be implemented

  • no-multiple-send-calls
  • check-send-result

Access the complete Solium documentation

Keywords

FAQs

Last updated on 03 Jan 2018

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.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc