SlideShare a Scribd company logo
Сигурност при разработката на
        разширения

         Веселин Николов
             @dzver
          WordCamp Sofia 2012
За мен
За мен


●   Работя с компютри
За мен


●   Работя с компютри
●   В Automattic – WordPress.com
За мен


●   Работя с компютри
●   В Automattic – WordPress.com
●   http://automattic.com/jobs
Сигурност...
Сигурност и плъгини
1. Пароли и хешове
2. XSS
3. XSRF
4. SQL Injection (да, в 2012.)
Пароли и хешове




    ~30%
От сайтовете ползват пароли в
          явен вид.
... и някой знае паролата ви.
Пароли и хешове
1. Пароли
wp_hash_password( 'test' );
-> $P$BGMjSkfCR8K6WlxaIYZvFii89aZ
Пароли и хешове
2. Salts
wp_generate_password( 30 );
-> P*DtBn)1WIGi)ekrSrxwDMXq1*N&Wm
(не пестете байтове)
Пароли и хешове
3. Опасности
error_log( print_r( $_POST ) )
wp_mail( ..., ..., print_r( $_POST ) )
md5( 'нещо предвидимо' )
XSS
XSS
  <?php echo $_GET['name']; ?>


http://myproject.com/index.php?name=<script...
XSS
<?php echo $name; ?>


vs


<?php echo esc_html( $name ); ?>
XSS
●   esc_html
●   esc_url
●   esc_attr
●   esc_js
●   esc_textarea
XSS
Често срещани проблеми:
1. Липса на esc_*
2. Погрешна употреба на esc_* функция
3. Липса или неправилна валидация
4. Typos
XSS
Погрешна употреба на esc_*

<script>
var a = '<?php echo esc_html( $a ) ?>'
var b = <?php echo json_encode( $b ) ?>
XSS
Употреба на esc_* без валидация:

<script src=”<?php echo esc_url( $js ) ?>”>


където
$js = 'http://evil-project.com/js';
XSS
Неправилна валидация на ID-та
1. Проверка вместо cast

if ( intval( $myfield ) )
   echo $myfield;


   // $myfield = '1 <script...';
XSS
Неправилна валидация на ID-та
2. Липса на ^ и $ в regexp

if ( ! preg_match( '/[a-z0-9_-]/i', $myfield ) )
   return 'You are trying to hack me!';


   // $myfield = '<script ...'
XSS
Неправилна валидация на URL


1. . е wildcard.

if ( preg_match ( '!^https?://(www.)*good-host.com/js/!i',
$myjs) ...
// $myjs = http://wwwwgoodhost.com/js
XSS
Неправилна валидация на URL


2. Липсващ /

if ( preg_match ( '!^https?://(www.)?good-host.com!i',
$myjs)
// $myjs = 'http://www.good-host.com.dzver.com/'
XSS
Неправилна валидация на URL


3. Липсващ ^

if ( preg_match ( '!https?://(www.)*good-host.com/js/!i',
$myjs)
// $myjs = 'http://dzver.com/bad.js?http://good-host.com/js/'
XSS
Неправилна валидация на URL


4. Позволен / в хост-а

if ( ! preg_match( '!^https?://[^.]+.whatever.com/.+$!i',
$url ) )
// $myjs = 'http://3254656436/or.whatever.com/evil.js'
// $myjs = '<script.../.whatever.com/'
XSS
Бонус - printf вместо sprintf

esc_html( printf( $name ) )
XSRF
<script>
jQuery.get( '
http://mysite.com/index.php?action=delete_user&user_id=5' );
</script>




<img src=
http://mysite.com/index.php?action=delete_user&user_id=5>
XSRF
Nonces

$nonce= wp_create_nonce( 'my-nonce' );
$url = “...&nonce=$nonce”


if ( ! wp_verify_nonce( $nonce, 'my-nonce' ) )
   wp_redirect()
XSRF
Nonces

wp_nonce_url
wp_nonce_field
check_admin_referer


http://codex.wordpress.org/Wordpress_Nonce_Implementation
http://codex.wordpress.org/Function_Reference/wp_verify_nonce
SQL Injection




$wpdb->prepare()
Защита
●   VaultPress
●   Exploit Scanner

    http://wordpress.org/extend/plugins/exploit-scanner/
Защита
●   Не вярвайте на юзърски инпут
●   Man-in-the-middle HTTPS
●   Внимавайте с редиректите. wp_safe_redirect.
●   Extract може да препокрива променливи
●   Внимавайте с call_user_func, $obj->$var, eval
●   `` винаги с escape_shell_args
?

More Related Content

ODP
Чести проблеми в сигурността на уеб проектите
Veselin Nikolov
 
ODP
WordPress Security
Veselin Nikolov
 
ODP
Php sec
phristov
 
PPT
Php sec
Dido_mn
 
PDF
Security without obscurity
Vladimir Vassilev
 
PDF
Selected Aspects of Software Development
Haitham El-Ghareeb
 
PPT
NoSQL бази от данни - възможности и приложение, дипломна защита
Veselin Nikolov
 
PPTX
Introducción al Email Marketing
krasis
 
Чести проблеми в сигурността на уеб проектите
Veselin Nikolov
 
WordPress Security
Veselin Nikolov
 
Php sec
phristov
 
Php sec
Dido_mn
 
Security without obscurity
Vladimir Vassilev
 
Selected Aspects of Software Development
Haitham El-Ghareeb
 
NoSQL бази от данни - възможности и приложение, дипломна защита
Veselin Nikolov
 
Introducción al Email Marketing
krasis
 

Viewers also liked (20)

PPT
Culture, Economy, Community: A Cultural Plan for Chatham-Kent
Emily Robson
 
PDF
Go &amp; microservices
Hiraq Citra M
 
PPT
Shn Overview Updated 2009 06 P11 20
joaovox
 
PDF
Integration
Haitham El-Ghareeb
 
PPTX
Cypris Chat - 20/20 Pecha Kucha
Mike McKay
 
PPT
Pansig2010 - Cypris Chat
Mike McKay
 
PDF
Bloom Filter Based Routing for Content-Based Publish/Subscribe
Zbigniew Jerzak
 
PPT
Wellness on the Internet
Hans van der Mey
 
PPTX
Amazing number3
ShdwClaw
 
PDF
Shn, permaculture pilot, 2008 april, 21 30
joaovox
 
PPT
HRPS DC Deck
Steve Mahaley
 
PPTX
Marketing research of the future
Kristof De Wulf
 
PPTX
Amazing number3
ShdwClaw
 
PPT
Imp Act Presentation
US Cochrane Center
 
PPT
Pertemuan Struktural Desember 2008 Baru
puskesmas mojoagung
 
PPT
Niagaras Journey Towards A Culture Plan Nov 17
Emily Robson
 
PPT
Milieu
guest05f81
 
PDF
Power point training the power of visuals
Linda Mkhize-Manashe
 
PPT
Saint valentine’s story
anacarietta
 
PPT
Economies in Transition: Leveraing Cultural Assets for Prosperityes In Transi...
Emily Robson
 
Culture, Economy, Community: A Cultural Plan for Chatham-Kent
Emily Robson
 
Go &amp; microservices
Hiraq Citra M
 
Shn Overview Updated 2009 06 P11 20
joaovox
 
Integration
Haitham El-Ghareeb
 
Cypris Chat - 20/20 Pecha Kucha
Mike McKay
 
Pansig2010 - Cypris Chat
Mike McKay
 
Bloom Filter Based Routing for Content-Based Publish/Subscribe
Zbigniew Jerzak
 
Wellness on the Internet
Hans van der Mey
 
Amazing number3
ShdwClaw
 
Shn, permaculture pilot, 2008 april, 21 30
joaovox
 
HRPS DC Deck
Steve Mahaley
 
Marketing research of the future
Kristof De Wulf
 
Amazing number3
ShdwClaw
 
Imp Act Presentation
US Cochrane Center
 
Pertemuan Struktural Desember 2008 Baru
puskesmas mojoagung
 
Niagaras Journey Towards A Culture Plan Nov 17
Emily Robson
 
Milieu
guest05f81
 
Power point training the power of visuals
Linda Mkhize-Manashe
 
Saint valentine’s story
anacarietta
 
Economies in Transition: Leveraing Cultural Assets for Prosperityes In Transi...
Emily Robson
 
Ad

Similar to Сигурност при разработката на WordPress разширения (9)

PDF
5494 n nikolov_zashtita
Nikolai Nikolov
 
PDF
5494 n nikolov_zashtita_ppt
Nikolai Nikolov
 
POT
Anti SQLi
Sebastiqn Sybi
 
PPTX
PHP Security
plamenamarinova
 
PPT
JavaScipt and AJAX Programming
LogMan Graduate School on Knowledge Economy
 
PPT
Web Programming with JavaScript and Ajax
LogMan Graduate School on Knowledge Economy
 
PPT
B7 t7 arrays
Asiya Petrova
 
PPT
B7 t7 arrays
Asiya Petrova
 
ODP
Web applications with Catalyst BG
svilen.ivanov
 
5494 n nikolov_zashtita
Nikolai Nikolov
 
5494 n nikolov_zashtita_ppt
Nikolai Nikolov
 
Anti SQLi
Sebastiqn Sybi
 
PHP Security
plamenamarinova
 
JavaScipt and AJAX Programming
LogMan Graduate School on Knowledge Economy
 
Web Programming with JavaScript and Ajax
LogMan Graduate School on Knowledge Economy
 
B7 t7 arrays
Asiya Petrova
 
B7 t7 arrays
Asiya Petrova
 
Web applications with Catalyst BG
svilen.ivanov
 
Ad

More from Veselin Nikolov (7)

PPTX
Leadership for Developers, WordCamp Norway
Veselin Nikolov
 
ODP
WordPress Security @ Vienna WordPress + Drupal Meetup
Veselin Nikolov
 
ODP
Lessons from my work on WordPress.com
Veselin Nikolov
 
PDF
Veselin word camp-romania-2014
Veselin Nikolov
 
ODP
Разширения
Veselin Nikolov
 
PPT
20 начина да си убиеш блога, без да се усетиш
Veselin Nikolov
 
PPT
Блоговете между двата блогкемпа във Велико Търново
Veselin Nikolov
 
Leadership for Developers, WordCamp Norway
Veselin Nikolov
 
WordPress Security @ Vienna WordPress + Drupal Meetup
Veselin Nikolov
 
Lessons from my work on WordPress.com
Veselin Nikolov
 
Veselin word camp-romania-2014
Veselin Nikolov
 
Разширения
Veselin Nikolov
 
20 начина да си убиеш блога, без да се усетиш
Veselin Nikolov
 
Блоговете между двата блогкемпа във Велико Търново
Veselin Nikolov
 

Сигурност при разработката на WordPress разширения