Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
*.pyc
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
## Running SCA

```bash
pip install -r requirements.txt
./sca.py --input-files=analyze-me.php
```

## Running the test suite
```bash
pip install -r requirements.txt
nosetests core/tests/ --ignore-files=.*samate.*
```

2 changes: 1 addition & 1 deletion core/sca_core.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
# pushing/popping the scopes from the stack.
Node = phpast.Node


def accept(nodeinst, visitor):
skip = visitor(nodeinst)
if skip:
Expand Down Expand Up @@ -175,4 +176,3 @@ def _visitor(self, node):
def debug(self, newobj):
if self.DEBUG and newobj:
print newobj

9 changes: 4 additions & 5 deletions core/tests/test_vulnerabilities.py
Original file line number Diff line number Diff line change
Expand Up @@ -125,7 +125,7 @@ def test_vuln_functions_4(self):
analyzer = PhpSCA(code)
sys1, echo, sys2 = analyzer.get_func_calls()
self.assertEquals([], sys1.vulntypes)
self.assertTrue('XSS' in echo.vulntypes)
self.assertIn('XSS', echo.vulntypes)
self.assertTrue('OS_COMMANDING' in sys2.vulntypes)

def test_vuln_functions_5(self):
Expand Down Expand Up @@ -164,7 +164,7 @@ def test_assignment_multiple(self):
echo $a;
?>'''
vulns = PhpSCA(code).get_vulns()
self.assertTrue('XSS' in vulns)
self.assertIn('XSS', vulns)
self.assertTrue('SQL_INJECTION' in vulns)

def test_multiple_parents_vuln_trace(self):
Expand All @@ -173,7 +173,7 @@ def test_multiple_parents_vuln_trace(self):
echo $_GET[2] . $a;
?>'''
vulns = PhpSCA(code).get_vulns()
self.assertTrue('XSS' in vulns)
self.assertIn('XSS', vulns)
self.assertEquals(2, len(vulns['XSS']))
self.assertEquals(3, vulns['XSS'][0][-1].lineno)
self.assertEquals(2, vulns['XSS'][1][-1].lineno)
Expand All @@ -185,5 +185,4 @@ def test_samevar(self):
echo $param;
?>'''
vulns = PhpSCA(code).get_vulns()
self.assertTrue('XSS' in vulns)

self.assertIn('XSS', vulns)
5 changes: 5 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pymock==1.0.5.1
phply==0.9.1
lxml==3.4.4


2 changes: 2 additions & 0 deletions sca.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,9 +22,11 @@
For more info visit https://github.com/wvdongen/SCA
'''


def usage():
print usage_doc


def main():
try:
long_options = ['help', 'input-files=']
Expand Down