Skip to content

Commit f6dba2c

Browse files
authored
Merge pull request #36 from niamccash/check-for-alt-value-in-getproperty
Check for alt value in getproperty
2 parents f6d6fba + d7232dd commit f6dba2c

File tree

3 files changed

+81
-1
lines changed

3 files changed

+81
-1
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,10 @@ api.controller = function ($rootScope, $scope) {
123123
};
124124
```
125125

126+
### Provide alternate value when fetching Glide property
127+
Recommendation to provide alternate/default value when calling gs.getProperty() to avoid errors if the property is not set.
128+
129+
126130
## Category: Security
127131

128132
### Tables without ACLs
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
aQgfvSnhfC1wVpuKQWhyhUbVCWpldAIXeFWQKJua_aMBJoo85rtlMi5xn9KG5nidXKThCkM8feBrcyFJeo-VtULwIXM7nd5AhwRgHc-VCp5tkNM4hsqpmD28YvfJ-rPIJYR_mUqcUwW_ID_GEKPARpUmsJXWMf-jmcc-ObkNNXJvYdzC2bWesQhNmYZP8gmjejTCkz-ID2_yOqqtcrxakfHtzadbAlixtE6-Ips8WZJwkFKogWjfXbeRFkkt2Q38ElCebT3gI8d3EFmdRZLHW20jpzYWgOR4HbGWM4zWyWoOlfcPGgYwheLugrwtDHodWMf6VDAvnmLqHCORandvFfF8o2Ci794mag0lIWxXsQ3Jzl5gZMb4Hu2I9wFSw0sJzwfYUnD1DB-gLlKaRN-0rWcW2b8ik8yt26GVcMXoqUdX514AFoPk4RO-Q-QpoEaBJ5RskOvepYP62AZ8zMb3wDqJUTJRfy3_uQQXMOmIHTI8HSVUL54ddI2uRrfEtvBlYldjHECjFOu716btBVX9WW828DhvbDtGE2VA4cKz4O4LRWQenhRdbhdWcPKAcAYSMLyliNLMkABTEd6OfpJD_GPA5AGlgb12DZtneAqIUEFFzpuS1fQMZLOd8ceXGo4o1bk-W6fH8PiNGkK2Xtyb93W2UXBvDNRxKlNWVeaIEVY
1+
ZCv9qMuUECPrTGsjutWyjVM6cefm_yWSCqBvdU5jOa9uSn7hiI95_m0V8_jlfMEU2FiFlapN-Ss6Q_K-REFvJw12mEIr5QB3H8K0mrWENPYVncsHXtvXlfBikpUcSt21sf_7WU5JFeDIzLXNmeLSiQFFVVcvbTX50yMmURQ9pr9IZJUeKj9a-gbJqYsQxZg0BggN9TxjY3gZzjmLc6mH7aPl_QarAd_mhvzNTODSrAKl3C3SPzdJiPggT_KyR4ZzjwbOpUnQj05jprKUXFkJ9JqbaIHyPHZW7IUuy0vHZa4Qu1_Yv1DS16MfyqYSZZJSXHTOQv1dL6BtpZnhVAm5DJ5QLNrkcALIX9lG6Ij3nL_W8CF9utf39dUlmrQcD43S03VUaB9931k44KoSylO60i3UIxSs_-hqaI1nrtKOogaTtN47-Gw66GqS_OmduFl5gZsNAkjZcf2Cp8IdBgia4wUzThFjDVIBvyDsdmCJs6egUXHw9OMf1YCdp4WS-819ePV4gAJzFs0yoM6uYMhLocgkVBVQI0VeNxIWcm-9ztoLxZ4n2V6vqg9f-Q7UKVLSdbPOBbwXhzU7J50BsMwE8mZ5GhzJ1wnbavlZs_oyyhyZZOJHO1mSLNLpHzvC58AE87ur5OZCoc3tUlkl38lZSChiTMa_Ds9RajkJT5A0uyE
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
<?xml version="1.0" encoding="UTF-8"?><record_update table="scan_linter_check">
2+
<scan_linter_check action="INSERT_OR_UPDATE">
3+
<active>true</active>
4+
<attributes/>
5+
<category>performance</category>
6+
<description>Providing an alternate, default value when calling gs.getProperty() helps mitigate risk of errors when property does not exist.</description>
7+
<documentation_url/>
8+
<finding_type>scan_finding</finding_type>
9+
<name>Provide alternate value when fetching Glide property</name>
10+
<priority>3</priority>
11+
<resolution_details>Consider providing an alternate. default value when using gs.getProperty() in case the property does not exist</resolution_details>
12+
<run_condition/>
13+
<score_max>100</score_max>
14+
<score_min>0</score_min>
15+
<score_scale>1</score_scale>
16+
<script><![CDATA[(function (engine) {
17+
18+
/**
19+
* The following to exclude certain tables like sys_script_execution_history
20+
* from being part of this scan is NOT possible here due to app scoping issues
21+
* (https://github.com/ServiceNowDevProgram/example-instancescan-checks/issues/9)
22+
*/
23+
//var excludedTablesProp = gs.getProperty(/* custom property name here */);
24+
//var excludedTables = excludedTablesProp.split(',');
25+
//var tableName = engine.current.getTableName();
26+
//if (!new ArrayUtil().contains(excludedTables, tableName)) {
27+
28+
engine.rootNode.visit(function(node) {
29+
30+
// Find an occurrence of the getProperty function
31+
if (node.getNameIdentifier() && node.getNameIdentifier() === 'getProperty') {
32+
33+
// Walk up the AST tree to check if function is called on GlideSystem
34+
if (node.getParent().getTypeName() === 'GETPROP'
35+
&& node.getParent().toSource() === 'gs.getProperty') {
36+
37+
var argsProvided = 0;
38+
39+
// Walk up to grandparent to check for the arguments provided
40+
node.getParent().getParent().visit(function(childnode) {
41+
// Case 1: Finds argument specified as a string, including when
42+
// default value is provided as number or boolean
43+
// eg. gs.getProperty('value1', 'value2');
44+
if (childnode.getTypeName() === 'STRING' || childnode.getTypeName() === 'NUMBER'
45+
|| childnode.getTypeName() === 'TRUE' || childnode.getTypeName() === 'FALSE') {
46+
argsProvided ++;
47+
}
48+
// Case 2: Find argument specified as a variable
49+
// eg. gs.getProperty(propertyName, defaultValue);
50+
else if (childnode.getTypeName() === 'NAME' && childnode.getNameIdentifier()
51+
&& childnode.getNameIdentifier() !== 'gs'
52+
&& childnode.getNameIdentifier() !== 'getProperty') {
53+
argsProvided++;
54+
}
55+
56+
});
57+
if (argsProvided != 2) {
58+
engine.finding.incrementWithNode(node);
59+
}
60+
}
61+
}
62+
});
63+
64+
})(engine);]]></script>
65+
<short_description>Provide alternate value when fetching Glide property</short_description>
66+
<sys_class_name>scan_linter_check</sys_class_name>
67+
<sys_created_by>nia.mccash</sys_created_by>
68+
<sys_created_on>2021-10-27 13:39:00</sys_created_on>
69+
<sys_id>4986078c2f6330d05dcb59ab2799b6d9</sys_id>
70+
<sys_name>Provide alternate value when fetching Glide property</sys_name>
71+
<sys_package display_value="Example Instance Checks" source="x_appe_exa_checks">ca8467c41b9abc10ce0f62c3b24bcbaa</sys_package>
72+
<sys_policy/>
73+
<sys_scope display_value="Example Instance Checks">ca8467c41b9abc10ce0f62c3b24bcbaa</sys_scope>
74+
<sys_update_name>scan_linter_check_4986078c2f6330d05dcb59ab2799b6d9</sys_update_name>
75+
</scan_linter_check>
76+
</record_update>

0 commit comments

Comments
 (0)