SlideShare ist ein Scribd-Unternehmen logo
1 von 123
LET’S WRITE SECURE DRUPAL
CODE!
TATAR BALAZS JANOS
DRUPALCAMP KYIV
KYIV, UKRAINE – 25.05.2019
DRUPALCAMP
KYIV’19
Who am I?
Tatar Balazs Janos
@tatarbj
Works with Drupal since 2007
CTO @ Petend
Drupal Security Correspondent @ EC
Active mentor @ Mentoring community group
Provisional member @ Drupal Security Team
SecOSdreamer @ Secure Open Source day
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Are there site builders?
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Demo
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Gist
https://gist.github.com/tatarbj/c73e452fe208f4281af09c110a63b9bd
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Are there developers/maintainers?
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Have you attended on a previous Let’s
write secure Drupal code! session?
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
DrupalCamp Antwerp 2017
DrupalCamp Ruhr 2018
DrupalDevDays 2018
Drupal Europe 2018
DrupalCamp Oslo 2018
DrupalCamp London 2019
Drupal Mountain Camp 2019
DrupalCamp Spain 2019
DrupalCamp Belarus 2019
DrupalCamp Kyiv 2019 – 10th edition!
History
DRUPALCAMP
KYIV’19 Tatar Balazs Janos - @tatarbj
Trends in Security
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Types of vulnerabilities
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Cross Site Scripting
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Client side vulnerability
Unfiltered output
Never trust any user input.
We’ve seen the demo before ;)
Cross Site Scripting
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Html::escape() – plain text
Xss::filter() – html is allowed
Xss::filterAdmin() – text by admins
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Bingo
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Everyone has a bingo card (check your bag!)
If you answer well, mark the number!
Wrong answer = no number!
First who shouts BINGO! wins the price!
Rules and etiquette
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Round 1
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
function custom_field_formatter_view(...) {
foreach ($items as $key => $value) {
//...
$element[$key] = array(
'#type' => 'markup',
'#markup' => t('<img src="!src" alt="@alt" />',
array('!src' => $value['src'], ‚$alt’ => $value['alt'])),
);
//...
}
return $element;
}
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
function custom_field_formatter_view(...) {
foreach ($items as $key => $value) {
//...
$element[$key] = array(
'#type' => 'markup',
'#markup' => t('<img src="!src" alt="@alt" />',
array('!src' => $value['src'], ‚$alt’ => $value['alt'])),
);
//...
}
return $element;
}
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
function custom_field_formatter_view(...) {
foreach ($items as $key => $value) {
//...
$element[$key] = array(
'#type' => 'markup',
'#markup' => t('<img src="@src" alt="@alt" />',
array('@src' => $value['src'], ‚$alt’ => $value['alt'])),
);
//...
}
return $element;
}
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
12
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php print '<a href="/' . check_url($url) . '">'; ?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php print '<a href="/' . check_url($url) . '">'; ?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
4
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
foreach ($items as $delta => $item) {
$id = $item->getValue()['target_id'];
$content = Drupal::entityTypeManager()
->getStorage($entity_type_id)
->load($id);
$body = $content->get('body_field')->getValue()[0]['value'];
}
$elements[$delta] = array(
'#theme' => 'something_custom',
'#body' => $body,
);
return $elements;
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
foreach ($items as $delta => $item) {
$id = $item->getValue()['target_id'];
$content = Drupal::entityTypeManager()
->getStorage($entity_type_id)
->load($id);
$body = $content->get('body_field')->getValue()[0]['value'];
}
$elements[$delta] = array(
'#theme' => 'something_custom',
'#body' => $body,
);
return $elements;
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
foreach ($items as $delta => $item) {
$id = $item->getValue()['target_id'];
$content = Drupal::entityTypeManager()
->getStorage($entity_type_id)
->load($id);
$body = [
'#type' => 'processed_text',
'#text' => $content->get('body_field')->getValue()[0]['value'],
'#format' => $content->get('body_field')->getValue()[0]['format'], ];
}
$elements[$delta] = array(
'#theme' => 'something_custom',
'#body' => $body,
);
return $elements;
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
23
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Drupal 8 allows Full HTML to be used
by anonymous users.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
Drupal 8 allows Full HTML to be used
by anonymous users.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
Drupal 8 allows Full HTML to be used
by authenticated and administrator
users.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
17
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
User input must be always sanitized.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
User input must be always sanitized.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
25
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Use behat/automated tests.
<script>alert('XSS')</script>
<img src="a" onerror="alert('title')">
Check your filters and user roles.
Do not give too many options to untrusted users!
Protection against Cross Site Scripting
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Access Bypass
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
User can access/do something.
Menu items can be defined to be
accessed/denied.
Many access systems: node, entity, field, views...
Access bypass
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Round 2
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
$query = db_select('node', 'n')
->fields('n', array('title', 'nid'))
->condition('type', 'article');
$result = $query->execute();
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
$query = db_select('node', 'n')
->fields('n', array('title', 'nid'))
->condition('type', 'article');
$result = $query->execute();
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
$query = db_select('node', 'n')
->fields('n', array('title', 'nid')
->condition('type', 'article')
->addTag('node_access');
$result = $query->execute();
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
29
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
mymodule.not_found:
path: '/not-found'
defaults:
_controller: DrupalmymoduleControllerNotFoundController::build404
_title: 'Page not found'
requirements:
_access: 'TRUE'
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
mymodule.not_found:
path: '/not-found'
defaults:
_controller: DrupalmymoduleControllerNotFoundController::build404
_title: 'Page not found'
requirements:
_access: 'TRUE'
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
16
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
All users on Drupal sites belong to at
least 2 user role.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
All users on Drupal sites belong to at
least 2 user role.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
All users on Drupal sites belong to at
least 1 user role.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
22
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Restricted permissions make Drupal
sites more secure by calling
restrict_permission() method.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
Restricted permissions make Drupal
sites more secure by calling
restrict_permission() method.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
Restricted permissions make Drupal
sites more secure by raising
attention on the permission page.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
6
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Drupal 8 allows users to mistype
their passwords unlimited times.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
Drupal 8 allows users to mistype
their passwords unlimited times.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
Drupal 8 allows users to mistype
their passwords 5 times.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
9
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Visit node/nid and other urls
Visit anything/%node
Use behat/automated tests.
node_access, entity_access
Menu definitions
user_access for permissions
$query->addTag('node_access')
Protection against Access bypass
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
SQL Injection
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Unauthorized access to database resources.
Do not trust any user input.
SA-CORE-2014-005 – Highly critical D7 SA
SQL Injection
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Round 3
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
$result = Drupal::database()
->delete('people')
->condition('name', '%_' . $_GET['param'], 'LIKE');
->execute();
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
$result = Drupal::database()
->delete('people')
->condition('name', '%_' . $_GET['param'], 'LIKE');
->execute();
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
$database = Drupal::database();
$result = $database
->delete('people')
->condition('name', $database->escapeLike($_GET['param']), 'LIKE');
->execute();
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
31
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
A highly critical Drupal 8 core update
remediated an SQL injection
vulnerability in 2014.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
A highly critical Drupal 8 core update
remediated an SQL injection
vulnerability in 2014.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
A highly critical Drupal 7 core update
remediated an SQL injection
vulnerability in 2014.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
15
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Use always drupal Database API!
db_query with :placeholder (deprecated in D8,
in D9 will be removed)
Filter parameters
Check the queries in code.
username' AND 1=1
POST requests by curl
Protection against SQL Injection
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Round 4
Ready for some other code?
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
function _generate_password($length = 8) {
$pass = ’’;
for ($i = 0; $i < $length; $i++) {
// Each iteration, pick a random character from the
// allowable string and append it to the password:
$pass .= $allowable_characters[mt_rand(0, $len)];
}
}
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
function _generate_password($length = 8) {
$pass = ’’;
for ($i = 0; $i < $length; $i++) {
// Each iteration, pick a random character from the
// allowable string and append it to the password:
$pass .= $allowable_characters[mt_rand(0, $len)];
}
}
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
<?php
function _generate_password($length = 8) {
$pass = ’’;
for ($i = 0; $i < $length; $i++) {
do {
// Find a secure random number within the range needed.
$index = ord(drupal_random_bytes(1));
} while ($index > $len);
$pass .= $allowable_characters[$index];
}
}
?>
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
8
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
// custom_module.permissions.yml
administer custom module:
title: 'Bypass access control'
description: 'Allows a user to bypass access control.’
// custom_module.routing.yml
custom_module.settings.form:
path: '/admin/config/custom/settings'
requirements:
_permission: 'administer custom module'
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
// custom_module.permissions.yml
administer custom module:
title: 'Bypass access control'
description: 'Allows a user to bypass access control.’
// custom_module.routing.yml
custom_module.settings.form:
path: '/admin/config/custom/settings'
requirements:
_permission: 'administer custom module'
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
// custom_module.permissions.yml
administer custom module:
title: 'Bypass access control'
description: 'Allows a user to bypass access control.’
restrict access: TRUE
// custom_module.routing.yml
custom_module.settings.form:
path: '/admin/config/custom/settings'
requirements:
_permission: 'administer custom module'
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
20
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
// contrib_module.routing.yml
contrib_module.settings.form:
path: '/admin/config/contrib/settings'
requirements:
_permission: 'administer site configuration'
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
// contrib_module.routing.yml
contrib_module.settings.form:
path: '/admin/config/contrib/settings'
requirements:
_permission: 'administer site configuration'
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
26
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
OWASP stands for Online Web
Authentication Super Project.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
OWASP stands for Online Web
Authentication Super Project.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
OWASP stands for Open Web
Application Security Project.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
10
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
XXE stands for XML External
Entities vulnerability.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
XXE stands for XML External
Entities vulnerability.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
32
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
SQL Injection is a server side
vulnerability.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
SQL Injection is a server side
vulnerability.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
13
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Cross Site Request Forgery
vulnerability is in the TOP10 of
OWASP list from 2017.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
Cross Site Request Forgery
vulnerability is in the TOP10 of
OWASP list from 2017.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
Cross Site Request Forgery
vulnerability is not in the TOP10 of
OWASP list from 2017, but was in 2013.
Tatar Balazs Janos - @tatarbj
?
DRUPALCAMP
KYIV’19
5
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
In case of no winner,
extra numbers are coming!
Tatar Balazs Janos - @tatarbj
!
DRUPALCAMP
KYIV’19
18
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
27
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
30
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
1
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
11
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
33
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Security Improvements
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
*https://events.drupal.org/sites/default/files/slides/pwolanin-2017-09-ways-drupal8-d.pdf
Many ways Drupal 8 is more secure!*
Twig templates for HTML generation
Removed PHP format
Site configuration exportable, versionable
User content entry and filtering improvements
User session and session always in ID handling
Automated CSRF token protection
Trusted host patterns enforced for requests
Single statement execution for SQL
Clickjacking protection
Content security policy compatibility with Core Javascript API
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Learn by Advisories
Tatar Balazs Janos - @tatarbj
Security advisories are for
 Only stable modules
 No alpha, beta, dev
 d.org hosted projects
@Maintainers: If you are contacted, be supportive! 
Drupal Security Team
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Hacked!
Security review (simplytest.me)
Password policy
Encrypt
Composer Security Checker
Permission report
Drop Guard
Security Awareness programs
+ PHPCS Drupal BestPractice Sniff
Security related projects
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
SecOSdays
25-26 OCTOBER, 2019 - SOFIA, BULGARIA
Call For Sessions and Sponsors are open!
DRUPALCAMP
KYIV’19
Questions?
Tatar Balazs Janos - @tatarbj
DRUPALCAMP
KYIV’19
Tatar Balazs Janos
@tatarbj
Thank you!
DRUPALCAMP
KYIV’19

Weitere ähnliche Inhalte

Mehr von Balázs Tatár

Mehr von Balázs Tatár (20)

How To Have Fun in Open Source - CMS Garden Unconference 2019
How To Have Fun in Open Source - CMS Garden Unconference 2019How To Have Fun in Open Source - CMS Garden Unconference 2019
How To Have Fun in Open Source - CMS Garden Unconference 2019
 
Software Development Weaknesses - SecOSdays Sofia, 2019
Software Development Weaknesses - SecOSdays Sofia, 2019Software Development Weaknesses - SecOSdays Sofia, 2019
Software Development Weaknesses - SecOSdays Sofia, 2019
 
Security Awareness for Open Source Web Applications
Security Awareness for Open Source Web ApplicationsSecurity Awareness for Open Source Web Applications
Security Awareness for Open Source Web Applications
 
A bug's life - Decoupled Drupal Security and Vulnerability Management
A bug's life - Decoupled Drupal Security and Vulnerability ManagementA bug's life - Decoupled Drupal Security and Vulnerability Management
A bug's life - Decoupled Drupal Security and Vulnerability Management
 
A bug's life - Drupal Application Security and Vulnerability Management
A bug's life - Drupal Application Security and Vulnerability ManagementA bug's life - Drupal Application Security and Vulnerability Management
A bug's life - Drupal Application Security and Vulnerability Management
 
A bug's life - Drupal Application Security and Vulnerability Management
A bug's life - Drupal Application Security and Vulnerability ManagementA bug's life - Drupal Application Security and Vulnerability Management
A bug's life - Drupal Application Security and Vulnerability Management
 
Let's write secure Drupal code! - DrupalCamp Spain 2019
Let's write secure Drupal code! - DrupalCamp Spain 2019Let's write secure Drupal code! - DrupalCamp Spain 2019
Let's write secure Drupal code! - DrupalCamp Spain 2019
 
DrupalCon Seattle 2019 - Mentoring Booth slides
DrupalCon Seattle 2019 - Mentoring Booth slidesDrupalCon Seattle 2019 - Mentoring Booth slides
DrupalCon Seattle 2019 - Mentoring Booth slides
 
Let's write secure Drupal code! Drupal MountainCamp 2019
Let's write secure Drupal code! Drupal MountainCamp 2019Let's write secure Drupal code! Drupal MountainCamp 2019
Let's write secure Drupal code! Drupal MountainCamp 2019
 
Let's write secure Drupal code! - DrupalCamp London 2019
Let's write secure Drupal code! - DrupalCamp London 2019Let's write secure Drupal code! - DrupalCamp London 2019
Let's write secure Drupal code! - DrupalCamp London 2019
 
Everything You Always Wanted to Know About Drupal Security* (*But Were Afraid...
Everything You Always Wanted to Know About Drupal Security* (*But Were Afraid...Everything You Always Wanted to Know About Drupal Security* (*But Were Afraid...
Everything You Always Wanted to Know About Drupal Security* (*But Were Afraid...
 
Everything You Always Wanted to Know About Drupal Security (*But Were Afraid ...
Everything You Always Wanted to Know About Drupal Security (*But Were Afraid ...Everything You Always Wanted to Know About Drupal Security (*But Were Afraid ...
Everything You Always Wanted to Know About Drupal Security (*But Were Afraid ...
 
Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018Let's write secure Drupal code! - DrupalCamp Oslo, 2018
Let's write secure Drupal code! - DrupalCamp Oslo, 2018
 
Mentoring slides - Drupal Europe, Darmstadt, Germany 2018
Mentoring slides - Drupal Europe, Darmstadt, Germany 2018Mentoring slides - Drupal Europe, Darmstadt, Germany 2018
Mentoring slides - Drupal Europe, Darmstadt, Germany 2018
 
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, Germany
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, GermanyLet's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, Germany
Let's write secure Drupal code! - 13.09.2018 @ Drupal Europe, Darmstadt, Germany
 
Let's write secure Drupal code!
Let's write secure Drupal code!Let's write secure Drupal code!
Let's write secure Drupal code!
 
Let's write secure drupal code!
Let's write secure drupal code!Let's write secure drupal code!
Let's write secure drupal code!
 
Quality assurance in practice
Quality assurance in practiceQuality assurance in practice
Quality assurance in practice
 
Quality assurance in practice - coffee meeting, January, DIGIT
Quality assurance in practice - coffee meeting, January, DIGITQuality assurance in practice - coffee meeting, January, DIGIT
Quality assurance in practice - coffee meeting, January, DIGIT
 
Quality assurance in practice - brussels drupal meetup
Quality assurance in practice - brussels drupal meetupQuality assurance in practice - brussels drupal meetup
Quality assurance in practice - brussels drupal meetup
 

Kürzlich hochgeladen

Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 

Kürzlich hochgeladen (20)

Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?A Year of the Servo Reboot: Where Are We Now?
A Year of the Servo Reboot: Where Are We Now?
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 

Let's write secure Drupal code! - DrupalCamp Kyiv 2019

Hinweis der Redaktion

  1. Einstein said: “insanity is when you do the same thing over and over again and expect different results”
  2. Owasp: open web application security project
  3. Reference for the XSS issue that was basically caused by a security misconfiguration.
  4. Hide enabled blocks from selector that are used Context update from this wednesday
  5. Hide enabled blocks from selector that are used Context update from this wednesday
  6. Hide enabled blocks from selector that are used Context update from this wednesday
  7. Not because of having db_query deprecated, but: The $field param is used to derive various table and field names, but in each case the Database API automatically escapes these values. Note that the API does not do this for all arguments!
  8. Not because of having db_query deprecated, but: The $field param is used to derive various table and field names, but in each case the Database API automatically escapes these values. Note that the API does not do this for all arguments!
  9. Not because of having db_query deprecated, but: The $field param is used to derive various table and field names, but in each case the Database API automatically escapes these values. Note that the API does not do this for all arguments!
  10. Mt_rand is not secure enough!
  11. Insecure randomness by Mass Password Reset (SA-CONTRIB-2018-043) by Greg Knaddison