By Developers, For Developers
PDF Pg | Paper Pg | Type | Description | Fixed on | Comments |
---|---|---|---|---|---|
22 | TYPO | last paragraph on the page. ‘They allows us’ should maybe be ‘They allow us’? | 2009-07-12 | ||
19 | TYPO | Dave Raphael acknowledgement: ‘Yhere’ should be ‘There’? | 2009-07-12 | ||
25 | TYPO | first paragraph after the bullets: should maybe be something like: | 2009-07-12 | ||
27 | TYPO | 3rd paragraph: ‘in anyway’ should be ‘in any way’ | 2009-07-12 | ||
37 | TYPO | paragraph after the SELECT statement: | 2009-07-12 | ||
38 | TYPO | 4th paragraph should be: | 2009-07-12 | ||
42 | TYPO | first bullet: should be: | 2009-07-12 | ||
49 | SUGGEST | paragraph 1 talks about how role_id is equal to 2 | 2009-07-15 | ||
63 | TYPO | last paragraph: should be: | 2009-07-12 | ||
69 | TYPO | 4th paragraph should be: | 2009-07-12 | ||
11 | TYPO | In 3. Web Server, “…the our application…” should be “…then our application…” | 2009-07-12 | ||
16 | TYPO | “Administrator: Because business analyst are not allowed…” should be “Administrator: Because business analysts are not allowed…” | 2009-07-12 | ||
18 | TYPO | Last sentence on the page, “Let’s make | 2009-07-12 | ||
21 | TYPO | In first paragraph: | 2009-07-12 | ||
22 | ERROR | lunchedin_broken> rake db:fixtures:load Before launching this it would be good if you briefly described the assumed environment required for this command to execute successfully. I installed a freah version of instant rails 2.0, and then did an online update. That resulted in me having rails (2.3.2, 2.0.2). On trying to execute this command, I was informed that it needed rails 2.2.2. After installing rails 2.2.2 and repeating the command, I got the following error: rake aborted! | 2009-07-16 | ||
-1 | ERROR | Note: Description: Bug: | 2009-07-15 | ||
24 | TYPO | First paragraph, last sentence: “We can also use them to manipulate the response before the it is received by the browser” should be “We can also use them to manipulate the response before it is received by the browser”. | 2009-07-28 | ||
25 | TYPO | Second Paragraph, last sentence: “We will to hack the administration console using an ordinary account” should be “We will hack the administration console using an ordinary account”. | 2009-07-28 | ||
26 | TYPO | First paragraph after the bullets, end of first sentence: “… all attributes passed to the new( ) method and will be set in User object” should be “… all attributes passed to the new( ) method will be set in the User object”. | 2009-07-28 | ||
26 | TYPO | First paragraph after the bullets, end of last sentence: “… we can insert our own form fields and the application will gladly set values form if a column exists” should be “… we can insert our own form fields and the application will gladly set values if a column exists”. | 2009-07-28 | ||
26 | TYPO | Second paragraph after the bullets, last sentence: “This protection helps prevents leaks of internal information that may be used against our applications” should be “This protection helps prevent leaks of internal information that may be used against our applications”. | 2009-07-28 | ||
28 | TYPO | Last paragraph, first sentence: “The reason we add this value as a new form element is because of how Rails maps form parameters to a newly instantiated objects” should be either “The reason we add this value as a new form element is because of how Rails maps form parameters to newly instantiated objects” or “The reason we add this value as a new form element is because of how Rails maps form parameters to a newly instantiated object”. | 2009-07-28 | ||
33 | TYPO | First paragraph after the bullet, first sentence: “We are able to draw these assumptions without ever looking the source code on server …” should be “We are able to draw these assumptions without ever looking at the source code on server …”. | 2009-07-28 | ||
31 | TYPO | In the http link: “localhost:3000/venues/show” should be something like “localhost:3000/venues/1”. Using show generates an ActiveRecord::RecordNotFound in VenuesController#show error. | 2009-07-28 | ||
36 | TYPO | First paragraph, first full sentence: “If you are you running the sample application with the development mode …” should be “If you are running the sample application with the development mode …”. | 2009-07-28 | ||
39 | TYPO | First paragraph, last sentence: “Luckily for use we can all agree cross site scripting vulnerabilities are bad, regardless of what subcategory someone wants to put them under” should be “Luckily for us we can all agree cross site scripting vulnerabilities are bad, regardless of what subcategory someone wants to put them under”. | 2009-07-28 | ||
39 | TYPO | Third paragraph, second sentence: “Given this, let’s see if developer has missed …” should be “Given this, let’s see if the developer has missed …”. | 2009-07-28 | ||
39 | TYPO | Fifth paragraph, second sentence: “While italics are only slightly menacing, such an action does proves the applications is in fact vulnerable to html injection” should be “While italics are only slightly menacing, such an action does prove the application is in fact vulnerable to html injection” | 2009-07-28 | ||
41 | TYPO | First paragraph, fourth sentence: “When sending special and reserved we must URL encode them” should be “When sending special and reserved characters we must URL encode them”. | 2009-07-28 | ||
41 | TYPO | First paragraph, last sentence: “In Ruby we can accomplish by calling the escape(string) method of the CGI class” should be “In Ruby we can accomplish this by calling the escape(string) method of the CGI class”. | 2009-07-28 | ||
42 | ERROR | Third paragraph, first sentence: “This alert will be shown every time the page is loaded”. | 2009-07-28 | ||
43 | TYPO | Second paragraph, fourth sentence: “… allowing them to anything that your account is allowed to do” should be “… allowing them to do anything that your account is allowed to do”. | 2009-07-28 | ||
43 | ERROR | Script at top of page: Not sure what should be the observed result here??? I got nothing other than an empty comment box displayed after the previous entered commentd. | 2009-07-28 | ||
43 | TYPO | Fourth paragraph, second sentence: “The prefix, _lunchedin_session_id is used by Rails to manage make sure | 2009-07-28 | ||
45 | TYPO | Fifth paragraph, second bullet: “Cross site vulnerabilities typically occur without any knowledge of of the user’s knowledge and typically appear as normal traffic” should be “Cross site vulnerabilities typically occur without the user’s knowledge and typically appear as normal traffic”. | 2009-07-28 | ||
46 | TYPO | Second paragraph, first sentence: “For example, a browser interpreting malicious markup in saved into a comment on a forum is an example of XSS …” should be “For example, a browser interpreting malicious markup saved into a comment on a forum is an example of XSS …”. | 2009-07-28 | ||
48 | TYPO | Fourth paragraph, first sentence: “How can we prevent automatic binding of parameters parameters to ActiveRecord properties” should be “How can we prevent automatic binding of parameters to ActiveRecord properties”. | 2009-07-28 | ||
52 | TYPO | Third paragraph, last sentence: “Now subsequent calls to vote on a venue will be blocked, regardless if what rendered view is displayed to the user” should be “Now subsequent calls to vote on a venue will be blocked, regardless of what rendered view is displayed to the user”. | 2009-07-28 | ||
55 | TYPO | First paragraph, first sentence: “The updated code is isn’t pretty, but it does the job …” should be “The updated code isn’t pretty, but it does the job …”. | 2009-07-28 | ||
58 | TYPO | First paragraph, first sentence: “On line 3 we changed the check_login( ) to use an class method on our User model” should be “On line 3 we changed the | 2009-07-28 | ||
58 | TYPO | Second paragraph, first sentence: “Now we that we have fixed our SQL injection flaw …” should be “Now that we have fixed our SQL injection flaw …”. Also it would be better to put this paragraph before the test code example, rather than after it. | 2009-07-28 | ||
58 | TYPO | Second paragraph, second sentence: “On line 7 …” should be “On line 6 …”. | 2009-07-28 | ||
58 | TYPO | Second paragraph, third sentence: “On line 8 …” should be “On line 7 …”. | 2009-07-28 | ||
59 | TYPO | Second paragraph, third sentence: “Unfortunately, these input patterns deceptively difficult to blacklist” should be “Unfortunately, these input patterns are deceptively difficult to blacklist”. | 2009-07-28 | ||
60 | TYPO | Second paragraph, first sentence: “We will cover input validation in the chapter, Chapter 5, Validation …” should be “We will cover input validation in Chapter 5, Validation …”. | 2009-07-28 | ||
60 | TYPO | Last paragraph, first sentence: “We can fix this by changing how each attribute rendered in the view, Rails includes the view helper method h( ) designed for such purpose” should be “We can fix this by changing how each attribute is rendered in the view. Rails includes the view helper method h( ) for this purpose”. | 2009-07-28 | ||
62 | TYPO | Third bullet, first sentence: “Do filter or sanitize model attributes are displayed in a view” should be either “Do filter or sanitize model attributes that are displayed in a view” or “Do filter or sanitize model attributes displayed in a view”. | 2009-07-28 | ||
63 | SUGGEST | Technique #4: You may want to define the term CAPTCHA as this is the first time it is used in the text. | 2009-07-28 | ||
63 | TYPO | Second paragraph, first sentence: “For this chapter will focus on technique #1” should be “This chapter will focus on technique #1”. | 2009-07-28 | ||
64 | TYPO | First paragraph, first sentence: “The Rails designers have thought of situations such as these and have given us the class method, verify( )” should be “The Rails designers have thought of situations such as these and have given us the class method verify( )”. | 2009-07-28 | ||
69 | TYPO | Repeated word ‘as’ end of line 4 and beginning of line 5. … this part works as | 2009-07-28 | ||
68 | TYPO | First paragraph, third sentence: “Figure Figure 4.1 shows what types of tests are suited for various vulnerability categories” should be “Figure 4.1 shows what types of tests are suited for various vulnerability categories”. | 2009-07-28 | ||
68 | TYPO | Second paragraph, end of first sentence: “… we’ll need more that the basic Rails testing infrastructure” should be “… we’ll need more than the basic Rails testing infrastructure”. | 2009-07-28 | ||
52 | TYPO | Code refers to a Rating object, not a Rate object. | 2009-08-05 | ||
15 | TYPO | End of section 1.6: “If the condition the first code example fails” doesn’t seem right. Was “In the condition …” meant? That sounds awkward. | 2009-08-05 | ||
28 | TYPO | Last sentence of second paragraph: “Select the ‘tamper’ button and the a dialog box that looks like Figure 2.6, on page 31.’ ”the a" is wrong, and the clause following “and” needs a verb. | 2009-08-05 | ||
64 | TYPO | “Attacks that are initiated with ECMAScript can forge HTTP request method thus rendering the defense vulnerable.” Should read “…can forge the…” | 2009-08-05 | ||
66 | TYPO | Page 66 lacks the “submit erratum” footer. ;-) Also, the second sentence has “is is” rather than “it is”: | 2009-08-05 | ||
67 | TYPO | In section Data Protection, first paragraph: Missing ’s in “application’s view”. | 2009-08-05 | ||
71 | TYPO | “We use the user fixture users(:bob) as defined in users.yml, to attempt modification of the event events(:rubycon) is owned by Wally.” Remove “is”. | 2009-08-26 | ||
18 | TYPO | “Do Not Repeat Yourself, is a principal…” should be | 2009-08-26 | ||
13 | TYPO | Second paragraph, last sentence: “How would the the banking customer repudiate the transfer” should be “How would the banking customer repudiate the transfer”. | 2009-08-26 | ||
13 | TYPO | Third paragraph, first sentence: “What if we will require the user to answer some secret questions before transferring the funds” should be “What if we require the user to answer some secret questions before transferring the funds”. | 2009-08-26 | ||
17 | TYPO | Last Administrator response, fifth sentence: “This group will only be allowed to add other business analyst” should be “This group will only be allowed to add other business analysts”. | 2009-08-26 | ||
18 | TYPO | First bullet: “All Cryptographic Keys must be stored in separate files outside of application directory” should be “All Cryptographic Keys must be stored in separate files outside of application directories”. | 2009-08-26 | ||
18 | TYPO | Last paragraph, first sentence: “Ultimately, security requirements are a much like usability requirements” should be “Ultimately, security requirements are much like usability requirements”. | 2009-08-26 | ||
23 | TYPO | Last sentence before section 2.2: “If if you feel the need to start over with clean data, simply execute the command again and new data shall appear” Which command or should it be “commands”? | 2009-08-26 | ||
23 | TYPO | Format of code line is different from the preceding two lines. “lunchedin_broken> rake db:fixtures:load” | 2009-08-26 | ||
25 | TYPO | Third paragraph: “Navigate your browser to [http link] of LunchedIn and view the HTML source of of the page”. Delete an “of”. Also might be good idea th remind the reader to start things up with a “ruby script/server” command. | 2009-08-26 | ||
26 | TYPO | Error #40033 claims to be corrected in B4; however, it has not been changed. First paragraph after the bullets, end of first sentence: “… all attributes passed to the new( ) method and will be set in User object” should be “… all attributes passed to the new( ) method will be set in the User object”. The word “and” needs to be removed after the word “method”. | 2009-08-26 | ||
26 | TYPO | Second last sentence on the page: Remove the comma after the word “control”. | 2009-08-26 | ||
33 | TYPO | “It’s easy to overlook direct access to objects not belonging to a user. Second sentence is redundant. | 2009-08-26 | ||
62 | TYPO | Third bullet: “Do or sanitize model attributes displayed in a view” should read “Do filter or sanitize model attributes displayed in a view” (missing word “filter”). | 2009-08-26 | ||
69 | TYPO | def test_loged_out_redirect should be test_logged_out_redirect. same typo in the downloadable code testing/lunchedin/test/functional/venues_controller_test.rb | 2009-08-26 | ||
70 | TYPO | missing d in “suppose” “Testing for authorization is about making sure users are only able to access data or operations they’re suppose to.” | 2009-08-26 | ||
71 | TYPO | e is replaced by c in “mime” “Here we mimc an authenticated user attempting to modify another user’s event.” | 2009-08-26 | ||
72 | TYPO | missing verb “How can we test to make sure sensitive parameters properly masked in log files?” | 2009-08-26 | ||
83 | TYPO | “This also demonstrates an additional reason why our principal of Defense in Depth, from Chapter 1, Security in Ruby on Rails, on page 9, becomes so important.” principal => principle | 2009-08-26 | ||
86 | TYPO | “– Double Dash - SQL Comment” missing one dash | 2009-08-26 | ||
92 | TYPO | “Authentication is the process of identifying and verifying a principal. We’ll see what a principle is in just a few paragraphs. For now, just think of principal as a user.” principle => principal | 2009-08-26 | ||
93 | TYPO | “control.Chapter 7, Authorization, on page 133 covers authorization in depth.” missing space between control. and Chapter | 2009-08-26 | ||
67 | SUGGEST | Under “Data Protection,” I would strongly recommend not suggesting that DES or MD5 are currently regarded as secure. DES uses a 56 bit key and is readily broken these days; Triple-DES or AES-128 is the current recommendation for minimum symmetric encryption strength. MD5 is showing significant weakness, and the current advice is to move to SHA1 (which is also starting to show “cracks in the foundation”). | 2009-08-26 | ||
54 | TYPO | Grammar nit: the first sentence on this page (“On line 3, the query …”) does not have a verb. | 2009-09-09 | ||
19 | TYPO | The second-to-last bullet point reads “Writing code that fails close”. It should likely read “Writing code that fails closed”. | |||
138 | SUGGEST | I think some explanation and a figure have disapeared from the end of p.138 / begining of p.139: Figure 7.5 does not show that Bob is denied access to the site. It however illustrates the last paragraph of p.138 (Joe’s Friends group), but for the Figure 7.5 to be correct, the text should also tell us that Bob is member of this group. | |||
161 | TYPO | Text: Should read: | |||
164 | TYPO | Text: “loose” should be “lose” | |||
39 | TYPO | On SQL injection on the statement page 39 SELECT * FROM users WHERE (username = ‘wally’ AND password = ‘fakepass’ or ‘a’ = ‘a’) LIMIT 1 will match all users, not Wally. Because of that the actual logged user will be Bob (id=1). To produce the commented result the statement had to be due to operators precedence as the following: SELECT * FROM users WHERE (username = ‘wally’ AND (password = ‘fakepass’ or ‘a’ = ‘a’)) LIMIT 1 As it complicate more the code you can change the password to fakepass’ or id = ’3 or fakepass’ or username = ’wally | |||
61 | ERROR | These anti-xss whitelists don’t cover unicode character sets, which are required for name and address entry in international applications. A current book should really cover whitelisting non-English alphabets, or at least make a suggestion. | |||
180 | ERROR | In figure 9.4, the CSR mays not include “the public key of the certificate authority email_ca.cer” as it is written. At this time, the csr has nothing to do with the CA. Cheers | |||
116 | SUGGEST | The LDAP authentic?() method on page 116 hard-codes all the values that should be read from the LDAP_CONF, as done on the next page. | |||
135 | ERROR | The description of MAC versus DAC authorization is entirely wrong. :) Discretionary access control is when object owners are allowed to specify which other users in the system may use the objects, and with which permissions. Standard Unix, extended Unix ACLs, Windows ACLs, etc., are all discretionary because the file or directory owner can choose which users or groups to grant read/write/execute (or delete/etc, for the fancier types). It is discretionary because it is at the discretion of the owner. Mandatory access control is when object owners do NOT have complete control over the allowed users and privileges of their objects. The security administrator decides what privileges may be granted and to whom. Users may also have some discretionary access control privileges, but they are subservient to the mandatory access control privileges. MAC is mandatory, because users cannot modify the privileges themselves. MAC does not have to be implemented with labels — the Common Criteria LSPP protection profile requires labels, but it is by no means universally accepted. MAC can also be implemented in part by standard filesystem services, such as Samba, which can be configured to export some shares read-only, or apply its own per-group or per-user access controls in addition to whatever DAC ACLs might also exist on files in the filesystem. | |||
172 | SUGGEST | Something about the voice of the introductory paragraph of section 9.1 struck me as aimed at the entirely wrong audience: “As a resident of the World Wide Web, you’ve probably heard about digital signatures. Digital signatures are crypto-systems built using message digests and asymmetric cryptography.Crypto-system is just a fancy way of describing a collection of cryptography techniques used” Ignore the missing space, I think the whole thing needs to be re-written. :) The book is already being read by people already interested in security, and can probably guess what ‘crypto-system’ means without being told that it is fancy in any way :) and mostly just want to know: (a) x509 vs openPGP? (b) does anyone actually use these mechanisms? with which MUAs? Please take this as it is meant, with kindness. :) This book is really good, but this paragraph rubbed me the wrong way. It’s not a blog post “so what’s all this digital signature stuff?” aimed at the Internet in general, but rather 170 pages into a Pragmatic Programmers book on how to program Rails securely. :) | |||
159 | SUGGEST | I think the description of symmetric versus asymmetric cryptography could use some extra exposition. Instead of: For the purposes of the book, we can divide cryptography into two main I suggest something more like: For the purposes of the book, we can divide cryptography into two main Asymmetric ciphers are normally used for key distribution and digital Symmetric ciphers are used either when key distribution happens out of The general gist is that the text doesn’t make clear that asymmetric ciphers are suitable only for very specific purposes, such as key distribution and signing message digests. The examples later in the text showing human-readable messages being encrypted directly using RSA are fine as examples go, but please annotate the examples to clearly indicate that real applications do not sign or encrypt messages directly with RSA. | |||
165 | TYPO | “That said, both RSA and DSA serve as excellent starting points for encryption.” DSA cannot be used with encryption. (DSA was selected to become the US Government’s digital signature standard because it can only be used for signature creation/validation, thus it could be easily exported from the United States. Because RSA could also be used for encryption, it was classified as a munition, and could only exported with a huge amount of paperwork.) | |||
151 | TYPO | “We can do this by providing something functionality along these lines…” s/something functionality/something functionally/ | |||
187 | TYPO | “We can use the an issued digital certificate…” s/the an/an/ | |||
189 | TYPO | “certificate revocation lists (curls)” s/curls/CRLs/ | |||
189 | TYPO | “revoke the ability to automate create comments” Suggest remove “automate” and change to “create comments via email”. | |||
189 | SUGGEST | The receive() method that does S/MIME email validation and comment parsing doesn’t actually make sure that: (a) the user rating the venue actually booked the venue. user = User.find_by_email(cert_email[1]) Otherwise someone could easily rate venues they’ve never booked. (b) that the date the user attempts to rate the venue has already passed (perhaps it makes sense to let voters rate venues before they have used them — perhaps venue staff are annoyingly pedantic people :) — but users could be rating venues they’ve never used and have no intention of ever using (say, they book the venue for the year 2525 or something.) | |||
189 | SUGGEST | “lunchedin@gmail.com” — we have example.com/net/org for a reason :) | |||
192 | TYPO | “You can learn more about option this in…” s/option this/this option/ | |||
214 | TYPO | Decide.erb has commented HTML included. The decision action has commented “Not sure we should nil this out here” :) | |||
219 | TYPO | “It’s primary intended use was to provide” s/It’s/Its/ | |||
241 | TYPO | “but false if the call not complete” s/call not/call did not/ (or rewrite to more-active “failed”. :) | |||
248 | TYPO | “SPNEGO can operate over many different of network protocols.” s/different of/different/ | |||
255 | TYPO | environment.rb includes a comment # BEGIN_HIGHLIGHT that feels like it was intended for the pragprog hamsters. :) | |||
256 | TYPO | “In this file, all we modify only the skip_before_filter” s/all we modify only/we only modify/ | |||
faerwaldsh | faerwaldsh | ERROR | science live details lime | ||
walbylenno | walbylenno | ERROR | glacier evaporation down developed | ||
birtleneum | birtleneum | SUGGEST | back investigate developed | ||
austenhutc | austenhutc | SUGGEST | available disputed benefits sea | ||
21 | TYPO | para 2: the URL …/profile/new should be …/users/new | |||
21 | TYPO | para 2: “Click the Tamper button in the dialog box, as shown in Figure 2.6” should read “Click the Tamper button to bring up the dialog box shown in Figure 2.6” (The dialog box with the Tamper button is not shown in fig 2.6!) | |||
21 | TYPO | para 3: “Control-click the column” should read “Control-click the Post Parameter column” | |||
21... | TYPO | Example code download: The Partial lunchedin_broken/app/views/tags/cloud.html.erb needs to be renamed …/_cloud.html.erb (and 14 other instances of the file.) | |||
21... | ERROR | The migration 007_create_tags_venues should be modified to read: | |||
32... | ERROR | The XSS exploits in section 2.6 appear not to work in Rails 3.0.5 and Firefox 3.6.13 (Hooray?) |