`, and ``.
45 | @font-family-monospace: Menlo, Monaco, Consolas, "Courier New", monospace;
46 | @font-family-base: @font-family-sans-serif;
47 |
48 | @font-size-base: 14px;
49 | @font-size-large: ceil((@font-size-base * 1.25)); // ~18px
50 | @font-size-small: ceil((@font-size-base * 0.85)); // ~12px
51 |
52 | @font-size-h1: floor((@font-size-base * 2.6)); // ~36px
53 | @font-size-h2: floor((@font-size-base * 2.15)); // ~30px
54 | @font-size-h3: ceil((@font-size-base * 1.7)); // ~24px
55 | @font-size-h4: ceil((@font-size-base * 1.25)); // ~18px
56 | @font-size-h5: @font-size-base;
57 | @font-size-h6: ceil((@font-size-base * 0.85)); // ~12px
58 |
59 | //** Unit-less `line-height` for use in components like buttons.
60 | @line-height-base: 1.428571429; // 20/14
61 | //** Computed "line-height" (`font-size` * `line-height`) for use with `margin`, `padding`, etc.
62 | @line-height-computed: floor((@font-size-base * @line-height-base)); // ~20px
63 |
64 | //** By default, this inherits from the ``.
65 | @headings-font-family: inherit;
66 | @headings-font-weight: 500;
67 | @headings-line-height: 1.1;
68 | @headings-color: inherit;
69 |
70 |
71 | //-- Iconography
72 | //
73 | //## Specify custom locations of the include Glyphicons icon font. Useful for those including Bootstrap via Bower.
74 |
75 | @icon-font-path: "../fonts/";
76 | @icon-font-name: "glyphicons-halflings-regular";
77 | @icon-font-svg-id: "glyphicons_halflingsregular";
78 |
79 | //== Components
80 | //
81 | //## Define common padding and border radius sizes and more. Values based on 14px text and 1.428 line-height (~20px to start).
82 |
83 | @padding-base-vertical: 6px;
84 | @padding-base-horizontal: 12px;
85 |
86 | @padding-large-vertical: 10px;
87 | @padding-large-horizontal: 16px;
88 |
89 | @padding-small-vertical: 5px;
90 | @padding-small-horizontal: 10px;
91 |
92 | @padding-xs-vertical: 1px;
93 | @padding-xs-horizontal: 5px;
94 |
95 | @line-height-large: 1.33;
96 | @line-height-small: 1.5;
97 |
98 | @border-radius-base: 4px;
99 | @border-radius-large: 6px;
100 | @border-radius-small: 3px;
101 |
102 | //** Global color for active items (e.g., navs or dropdowns).
103 | @component-active-color: #fff;
104 | //** Global background color for active items (e.g., navs or dropdowns).
105 | @component-active-bg: @brand-primary;
106 |
107 | //** Width of the `border` for generating carets that indicator dropdowns.
108 | @caret-width-base: 4px;
109 | //** Carets increase slightly in size for larger components.
110 | @caret-width-large: 5px;
111 |
112 |
113 | //== Tables
114 | //
115 | //## Customizes the `.table` component with basic values, each used across all table variations.
116 |
117 | //** Padding for ``s and ` `s.
118 | @table-cell-padding: 8px;
119 | //** Padding for cells in `.table-condensed`.
120 | @table-condensed-cell-padding: 5px;
121 |
122 | //** Default background color used for all tables.
123 | @table-bg: transparent;
124 | //** Background color used for `.table-striped`.
125 | @table-bg-accent: #f9f9f9;
126 | //** Background color used for `.table-hover`.
127 | @table-bg-hover: #f5f5f5;
128 | @table-bg-active: @table-bg-hover;
129 |
130 | //** Border color for table and cell borders.
131 | @table-border-color: #ddd;
132 |
133 |
134 | //== Buttons
135 | //
136 | //## For each of Bootstrap's buttons, define text, background and border color.
137 |
138 | @btn-font-weight: normal;
139 |
140 | @btn-default-color: #333;
141 | @btn-default-bg: #fff;
142 | @btn-default-border: #ccc;
143 |
144 | @btn-primary-color: #fff;
145 | @btn-primary-bg: @brand-primary;
146 | @btn-primary-border: darken(@btn-primary-bg, 5%);
147 |
148 | @btn-success-color: #fff;
149 | @btn-success-bg: @brand-success;
150 | @btn-success-border: darken(@btn-success-bg, 5%);
151 |
152 | @btn-info-color: #fff;
153 | @btn-info-bg: @brand-info;
154 | @btn-info-border: darken(@btn-info-bg, 5%);
155 |
156 | @btn-warning-color: #fff;
157 | @btn-warning-bg: @brand-warning;
158 | @btn-warning-border: darken(@btn-warning-bg, 5%);
159 |
160 | @btn-danger-color: #fff;
161 | @btn-danger-bg: @brand-danger;
162 | @btn-danger-border: darken(@btn-danger-bg, 5%);
163 |
164 | @btn-link-disabled-color: @gray-light;
165 |
166 |
167 | //== Forms
168 | //
169 | //##
170 |
171 | //** ` ` background color
172 | @input-bg: #fff;
173 | //** ` ` background color
174 | @input-bg-disabled: @gray-lighter;
175 |
176 | //** Text color for ` `s
177 | @input-color: @gray;
178 | //** ` ` border color
179 | @input-border: #ccc;
180 | //** ` ` border radius
181 | @input-border-radius: @border-radius-base;
182 | //** Border color for inputs on focus
183 | @input-border-focus: #66afe9;
184 |
185 | //** Placeholder text color
186 | @input-color-placeholder: @gray-light;
187 |
188 | //** Default `.form-control` height
189 | @input-height-base: (@line-height-computed + (@padding-base-vertical * 2) + 2);
190 | //** Large `.form-control` height
191 | @input-height-large: (ceil(@font-size-large * @line-height-large) + (@padding-large-vertical * 2) + 2);
192 | //** Small `.form-control` height
193 | @input-height-small: (floor(@font-size-small * @line-height-small) + (@padding-small-vertical * 2) + 2);
194 |
195 | @legend-color: @gray-dark;
196 | @legend-border-color: #e5e5e5;
197 |
198 | //** Background color for textual input addons
199 | @input-group-addon-bg: @gray-lighter;
200 | //** Border color for textual input addons
201 | @input-group-addon-border-color: @input-border;
202 |
203 |
204 | //== Dropdowns
205 | //
206 | //## Dropdown menu container and contents.
207 |
208 | //** Background for the dropdown menu.
209 | @dropdown-bg: #fff;
210 | //** Dropdown menu `border-color`.
211 | @dropdown-border: rgba(0,0,0,.15);
212 | //** Dropdown menu `border-color` **for IE8**.
213 | @dropdown-fallback-border: #ccc;
214 | //** Divider color for between dropdown items.
215 | @dropdown-divider-bg: #e5e5e5;
216 |
217 | //** Dropdown link text color.
218 | @dropdown-link-color: @gray-dark;
219 | //** Hover color for dropdown links.
220 | @dropdown-link-hover-color: darken(@gray-dark, 5%);
221 | //** Hover background for dropdown links.
222 | @dropdown-link-hover-bg: #f5f5f5;
223 |
224 | //** Active dropdown menu item text color.
225 | @dropdown-link-active-color: @component-active-color;
226 | //** Active dropdown menu item background color.
227 | @dropdown-link-active-bg: @component-active-bg;
228 |
229 | //** Disabled dropdown menu item background color.
230 | @dropdown-link-disabled-color: @gray-light;
231 |
232 | //** Text color for headers within dropdown menus.
233 | @dropdown-header-color: @gray-light;
234 |
235 | // Note: Deprecated @dropdown-caret-color as of v3.1.0
236 | @dropdown-caret-color: #000;
237 |
238 |
239 | //-- Z-index master list
240 | //
241 | // Warning: Avoid customizing these values. They're used for a bird's eye view
242 | // of components dependent on the z-axis and are designed to all work together.
243 | //
244 | // Note: These variables are not generated into the Customizer.
245 |
246 | @zindex-navbar: 1000;
247 | @zindex-dropdown: 1000;
248 | @zindex-popover: 1010;
249 | @zindex-tooltip: 1030;
250 | @zindex-navbar-fixed: 1030;
251 | @zindex-modal-background: 1040;
252 | @zindex-modal: 1050;
253 |
254 |
255 | //== Media queries breakpoints
256 | //
257 | //## Define the breakpoints at which your layout will change, adapting to different screen sizes.
258 |
259 | // Extra small screen / phone
260 | // Note: Deprecated @screen-xs and @screen-phone as of v3.0.1
261 | @screen-xs: 480px;
262 | @screen-xs-min: @screen-xs;
263 | @screen-phone: @screen-xs-min;
264 |
265 | // Small screen / tablet
266 | // Note: Deprecated @screen-sm and @screen-tablet as of v3.0.1
267 | @screen-sm: 768px;
268 | @screen-sm-min: @screen-sm;
269 | @screen-tablet: @screen-sm-min;
270 |
271 | // Medium screen / desktop
272 | // Note: Deprecated @screen-md and @screen-desktop as of v3.0.1
273 | @screen-md: 992px;
274 | @screen-md-min: @screen-md;
275 | @screen-desktop: @screen-md-min;
276 |
277 | // Large screen / wide desktop
278 | // Note: Deprecated @screen-lg and @screen-lg-desktop as of v3.0.1
279 | @screen-lg: 1200px;
280 | @screen-lg-min: @screen-lg;
281 | @screen-lg-desktop: @screen-lg-min;
282 |
283 | // So media queries don't overlap when required, provide a maximum
284 | @screen-xs-max: (@screen-sm-min - 1);
285 | @screen-sm-max: (@screen-md-min - 1);
286 | @screen-md-max: (@screen-lg-min - 1);
287 |
288 |
289 | //== Grid system
290 | //
291 | //## Define your custom responsive grid.
292 |
293 | //** Number of columns in the grid.
294 | @grid-columns: 12;
295 | //** Padding between columns. Gets divided in half for the left and right.
296 | @grid-gutter-width: 30px;
297 | // Navbar collapse
298 | //** Point at which the navbar becomes uncollapsed.
299 | @grid-float-breakpoint: @screen-sm-min;
300 | //** Point at which the navbar begins collapsing.
301 | @grid-float-breakpoint-max: (@grid-float-breakpoint - 1);
302 |
303 |
304 | //== Navbar
305 | //
306 | //##
307 |
308 | // Basics of a navbar
309 | @navbar-height: 50px;
310 | @navbar-margin-bottom: @line-height-computed;
311 | @navbar-border-radius: @border-radius-base;
312 | @navbar-padding-horizontal: floor((@grid-gutter-width / 2));
313 | @navbar-padding-vertical: ((@navbar-height - @line-height-computed) / 2);
314 | @navbar-collapse-max-height: 340px;
315 |
316 | @navbar-default-color: #777;
317 | @navbar-default-bg: #f8f8f8;
318 | @navbar-default-border: darken(@navbar-default-bg, 6.5%);
319 |
320 | // Navbar links
321 | @navbar-default-link-color: #777;
322 | @navbar-default-link-hover-color: #333;
323 | @navbar-default-link-hover-bg: transparent;
324 | @navbar-default-link-active-color: #555;
325 | @navbar-default-link-active-bg: darken(@navbar-default-bg, 6.5%);
326 | @navbar-default-link-disabled-color: #ccc;
327 | @navbar-default-link-disabled-bg: transparent;
328 |
329 | // Navbar brand label
330 | @navbar-default-brand-color: @navbar-default-link-color;
331 | @navbar-default-brand-hover-color: darken(@navbar-default-brand-color, 10%);
332 | @navbar-default-brand-hover-bg: transparent;
333 |
334 | // Navbar toggle
335 | @navbar-default-toggle-hover-bg: #ddd;
336 | @navbar-default-toggle-icon-bar-bg: #888;
337 | @navbar-default-toggle-border-color: #ddd;
338 |
339 |
340 | // Inverted navbar
341 | // Reset inverted navbar basics
342 | @navbar-inverse-color: @gray-light;
343 | @navbar-inverse-bg: #222;
344 | @navbar-inverse-border: darken(@navbar-inverse-bg, 10%);
345 |
346 | // Inverted navbar links
347 | @navbar-inverse-link-color: @gray-light;
348 | @navbar-inverse-link-hover-color: #fff;
349 | @navbar-inverse-link-hover-bg: transparent;
350 | @navbar-inverse-link-active-color: @navbar-inverse-link-hover-color;
351 | @navbar-inverse-link-active-bg: darken(@navbar-inverse-bg, 10%);
352 | @navbar-inverse-link-disabled-color: #444;
353 | @navbar-inverse-link-disabled-bg: transparent;
354 |
355 | // Inverted navbar brand label
356 | @navbar-inverse-brand-color: @navbar-inverse-link-color;
357 | @navbar-inverse-brand-hover-color: #fff;
358 | @navbar-inverse-brand-hover-bg: transparent;
359 |
360 | // Inverted navbar toggle
361 | @navbar-inverse-toggle-hover-bg: #333;
362 | @navbar-inverse-toggle-icon-bar-bg: #fff;
363 | @navbar-inverse-toggle-border-color: #333;
364 |
365 |
366 | //== Navs
367 | //
368 | //##
369 |
370 | //=== Shared nav styles
371 | @nav-link-padding: 10px 15px;
372 | @nav-link-hover-bg: @gray-lighter;
373 |
374 | @nav-disabled-link-color: @gray-light;
375 | @nav-disabled-link-hover-color: @gray-light;
376 |
377 | @nav-open-link-hover-color: #fff;
378 |
379 | //== Tabs
380 | @nav-tabs-border-color: #ddd;
381 |
382 | @nav-tabs-link-hover-border-color: @gray-lighter;
383 |
384 | @nav-tabs-active-link-hover-bg: @body-bg;
385 | @nav-tabs-active-link-hover-color: @gray;
386 | @nav-tabs-active-link-hover-border-color: #ddd;
387 |
388 | @nav-tabs-justified-link-border-color: #ddd;
389 | @nav-tabs-justified-active-link-border-color: @body-bg;
390 |
391 | //== Pills
392 | @nav-pills-border-radius: @border-radius-base;
393 | @nav-pills-active-link-hover-bg: @component-active-bg;
394 | @nav-pills-active-link-hover-color: @component-active-color;
395 |
396 |
397 | //== Pagination
398 | //
399 | //##
400 |
401 | @pagination-color: @link-color;
402 | @pagination-bg: #fff;
403 | @pagination-border: #ddd;
404 |
405 | @pagination-hover-color: @link-hover-color;
406 | @pagination-hover-bg: @gray-lighter;
407 | @pagination-hover-border: #ddd;
408 |
409 | @pagination-active-color: #fff;
410 | @pagination-active-bg: @brand-primary;
411 | @pagination-active-border: @brand-primary;
412 |
413 | @pagination-disabled-color: @gray-light;
414 | @pagination-disabled-bg: #fff;
415 | @pagination-disabled-border: #ddd;
416 |
417 |
418 | //== Pager
419 | //
420 | //##
421 |
422 | @pager-bg: @pagination-bg;
423 | @pager-border: @pagination-border;
424 | @pager-border-radius: 15px;
425 |
426 | @pager-hover-bg: @pagination-hover-bg;
427 |
428 | @pager-active-bg: @pagination-active-bg;
429 | @pager-active-color: @pagination-active-color;
430 |
431 | @pager-disabled-color: @pagination-disabled-color;
432 |
433 |
434 | //== Jumbotron
435 | //
436 | //##
437 |
438 | @jumbotron-padding: 30px;
439 | @jumbotron-color: inherit;
440 | @jumbotron-bg: @gray-lighter;
441 | @jumbotron-heading-color: inherit;
442 | @jumbotron-font-size: ceil((@font-size-base * 1.5));
443 |
444 |
445 | //== Form states and alerts
446 | //
447 | //## Define colors for form feedback states and, by default, alerts.
448 |
449 | @state-success-text: #3c763d;
450 | @state-success-bg: #dff0d8;
451 | @state-success-border: darken(spin(@state-success-bg, -10), 5%);
452 |
453 | @state-info-text: #31708f;
454 | @state-info-bg: #d9edf7;
455 | @state-info-border: darken(spin(@state-info-bg, -10), 7%);
456 |
457 | @state-warning-text: #8a6d3b;
458 | @state-warning-bg: #fcf8e3;
459 | @state-warning-border: darken(spin(@state-warning-bg, -10), 5%);
460 |
461 | @state-danger-text: #a94442;
462 | @state-danger-bg: #f2dede;
463 | @state-danger-border: darken(spin(@state-danger-bg, -10), 5%);
464 |
465 |
466 | //== Tooltips
467 | //
468 | //##
469 |
470 | //** Tooltip max width
471 | @tooltip-max-width: 200px;
472 | //** Tooltip text color
473 | @tooltip-color: #fff;
474 | //** Tooltip background color
475 | @tooltip-bg: #000;
476 | @tooltip-opacity: .9;
477 |
478 | //** Tooltip arrow width
479 | @tooltip-arrow-width: 5px;
480 | //** Tooltip arrow color
481 | @tooltip-arrow-color: @tooltip-bg;
482 |
483 |
484 | //== Popovers
485 | //
486 | //##
487 |
488 | //** Popover body background color
489 | @popover-bg: #fff;
490 | //** Popover maximum width
491 | @popover-max-width: 276px;
492 | //** Popover border color
493 | @popover-border-color: rgba(0,0,0,.2);
494 | //** Popover fallback border color
495 | @popover-fallback-border-color: #ccc;
496 |
497 | //** Popover title background color
498 | @popover-title-bg: darken(@popover-bg, 3%);
499 |
500 | //** Popover arrow width
501 | @popover-arrow-width: 10px;
502 | //** Popover arrow color
503 | @popover-arrow-color: #fff;
504 |
505 | //** Popover outer arrow width
506 | @popover-arrow-outer-width: (@popover-arrow-width + 1);
507 | //** Popover outer arrow color
508 | @popover-arrow-outer-color: rgba(0,0,0,.25);
509 | //** Popover outer arrow fallback color
510 | @popover-arrow-outer-fallback-color: #999;
511 |
512 |
513 | //== Labels
514 | //
515 | //##
516 |
517 | //** Default label background color
518 | @label-default-bg: @gray-light;
519 | //** Primary label background color
520 | @label-primary-bg: @brand-primary;
521 | //** Success label background color
522 | @label-success-bg: @brand-success;
523 | //** Info label background color
524 | @label-info-bg: @brand-info;
525 | //** Warning label background color
526 | @label-warning-bg: @brand-warning;
527 | //** Danger label background color
528 | @label-danger-bg: @brand-danger;
529 |
530 | //** Default label text color
531 | @label-color: #fff;
532 | //** Default text color of a linked label
533 | @label-link-hover-color: #fff;
534 |
535 |
536 | //== Modals
537 | //
538 | //##
539 |
540 | //** Padding applied to the modal body
541 | @modal-inner-padding: 20px;
542 |
543 | //** Padding applied to the modal title
544 | @modal-title-padding: 15px;
545 | //** Modal title line-height
546 | @modal-title-line-height: @line-height-base;
547 |
548 | //** Background color of modal content area
549 | @modal-content-bg: #fff;
550 | //** Modal content border color
551 | @modal-content-border-color: rgba(0,0,0,.2);
552 | //** Modal content border color **for IE8**
553 | @modal-content-fallback-border-color: #999;
554 |
555 | //** Modal backdrop background color
556 | @modal-backdrop-bg: #000;
557 | //** Modal backdrop opacity
558 | @modal-backdrop-opacity: .5;
559 | //** Modal header border color
560 | @modal-header-border-color: #e5e5e5;
561 | //** Modal footer border color
562 | @modal-footer-border-color: @modal-header-border-color;
563 |
564 | @modal-lg: 900px;
565 | @modal-md: 600px;
566 | @modal-sm: 300px;
567 |
568 |
569 | //== Alerts
570 | //
571 | //## Define alert colors, border radius, and padding.
572 |
573 | @alert-padding: 15px;
574 | @alert-border-radius: @border-radius-base;
575 | @alert-link-font-weight: bold;
576 |
577 | @alert-success-bg: @state-success-bg;
578 | @alert-success-text: @state-success-text;
579 | @alert-success-border: @state-success-border;
580 |
581 | @alert-info-bg: @state-info-bg;
582 | @alert-info-text: @state-info-text;
583 | @alert-info-border: @state-info-border;
584 |
585 | @alert-warning-bg: @state-warning-bg;
586 | @alert-warning-text: @state-warning-text;
587 | @alert-warning-border: @state-warning-border;
588 |
589 | @alert-danger-bg: @state-danger-bg;
590 | @alert-danger-text: @state-danger-text;
591 | @alert-danger-border: @state-danger-border;
592 |
593 |
594 | //== Progress bars
595 | //
596 | //##
597 |
598 | //** Background color of the whole progress component
599 | @progress-bg: #f5f5f5;
600 | //** Progress bar text color
601 | @progress-bar-color: #fff;
602 |
603 | //** Default progress bar color
604 | @progress-bar-bg: @brand-primary;
605 | //** Success progress bar color
606 | @progress-bar-success-bg: @brand-success;
607 | //** Warning progress bar color
608 | @progress-bar-warning-bg: @brand-warning;
609 | //** Danger progress bar color
610 | @progress-bar-danger-bg: @brand-danger;
611 | //** Info progress bar color
612 | @progress-bar-info-bg: @brand-info;
613 |
614 |
615 | //== List group
616 | //
617 | //##
618 |
619 | //** Background color on `.list-group-item`
620 | @list-group-bg: #fff;
621 | //** `.list-group-item` border color
622 | @list-group-border: #ddd;
623 | //** List group border radius
624 | @list-group-border-radius: @border-radius-base;
625 |
626 | //** Background color of single list elements on hover
627 | @list-group-hover-bg: #f5f5f5;
628 | //** Text color of active list elements
629 | @list-group-active-color: @component-active-color;
630 | //** Background color of active list elements
631 | @list-group-active-bg: @component-active-bg;
632 | //** Border color of active list elements
633 | @list-group-active-border: @list-group-active-bg;
634 | @list-group-active-text-color: lighten(@list-group-active-bg, 40%);
635 |
636 | @list-group-link-color: #555;
637 | @list-group-link-heading-color: #333;
638 |
639 |
640 | //== Panels
641 | //
642 | //##
643 |
644 | @panel-bg: #fff;
645 | @panel-body-padding: 15px;
646 | @panel-border-radius: @border-radius-base;
647 |
648 | //** Border color for elements within panels
649 | @panel-inner-border: #ddd;
650 | @panel-footer-bg: #f5f5f5;
651 |
652 | @panel-default-text: @gray-dark;
653 | @panel-default-border: #ddd;
654 | @panel-default-heading-bg: #f5f5f5;
655 |
656 | @panel-primary-text: #fff;
657 | @panel-primary-border: @brand-primary;
658 | @panel-primary-heading-bg: @brand-primary;
659 |
660 | @panel-success-text: @state-success-text;
661 | @panel-success-border: @state-success-border;
662 | @panel-success-heading-bg: @state-success-bg;
663 |
664 | @panel-info-text: @state-info-text;
665 | @panel-info-border: @state-info-border;
666 | @panel-info-heading-bg: @state-info-bg;
667 |
668 | @panel-warning-text: @state-warning-text;
669 | @panel-warning-border: @state-warning-border;
670 | @panel-warning-heading-bg: @state-warning-bg;
671 |
672 | @panel-danger-text: @state-danger-text;
673 | @panel-danger-border: @state-danger-border;
674 | @panel-danger-heading-bg: @state-danger-bg;
675 |
676 |
677 | //== Thumbnails
678 | //
679 | //##
680 |
681 | //** Padding around the thumbnail image
682 | @thumbnail-padding: 4px;
683 | //** Thumbnail background color
684 | @thumbnail-bg: @body-bg;
685 | //** Thumbnail border color
686 | @thumbnail-border: #ddd;
687 | //** Thumbnail border radius
688 | @thumbnail-border-radius: @border-radius-base;
689 |
690 | //** Custom text color for thumbnail captions
691 | @thumbnail-caption-color: @text-color;
692 | //** Padding around the thumbnail caption
693 | @thumbnail-caption-padding: 9px;
694 |
695 |
696 | //== Wells
697 | //
698 | //##
699 |
700 | @well-bg: #f5f5f5;
701 | @well-border: darken(@well-bg, 7%);
702 |
703 |
704 | //== Badges
705 | //
706 | //##
707 |
708 | @badge-color: #fff;
709 | //** Linked badge text color on hover
710 | @badge-link-hover-color: #fff;
711 | @badge-bg: @gray-light;
712 |
713 | //** Badge text color in active nav link
714 | @badge-active-color: @link-color;
715 | //** Badge background color in active nav link
716 | @badge-active-bg: #fff;
717 |
718 | @badge-font-weight: bold;
719 | @badge-line-height: 1;
720 | @badge-border-radius: 10px;
721 |
722 |
723 | //== Breadcrumbs
724 | //
725 | //##
726 |
727 | @breadcrumb-padding-vertical: 8px;
728 | @breadcrumb-padding-horizontal: 15px;
729 | //** Breadcrumb background color
730 | @breadcrumb-bg: #f5f5f5;
731 | //** Breadcrumb text color
732 | @breadcrumb-color: #ccc;
733 | //** Text color of current page in the breadcrumb
734 | @breadcrumb-active-color: @gray-light;
735 | //** Textual separator for between breadcrumb elements
736 | @breadcrumb-separator: "/";
737 |
738 |
739 | //== Carousel
740 | //
741 | //##
742 |
743 | @carousel-text-shadow: 0 1px 2px rgba(0,0,0,.6);
744 |
745 | @carousel-control-color: #fff;
746 | @carousel-control-width: 15%;
747 | @carousel-control-opacity: .5;
748 | @carousel-control-font-size: 20px;
749 |
750 | @carousel-indicator-active-bg: #fff;
751 | @carousel-indicator-border-color: #fff;
752 |
753 | @carousel-caption-color: #fff;
754 |
755 |
756 | //== Close
757 | //
758 | //##
759 |
760 | @close-font-weight: bold;
761 | @close-color: #000;
762 | @close-text-shadow: 0 1px 0 #fff;
763 |
764 |
765 | //== Code
766 | //
767 | //##
768 |
769 | @code-color: #c7254e;
770 | @code-bg: #f9f2f4;
771 |
772 | @kbd-color: #fff;
773 | @kbd-bg: #333;
774 |
775 | @pre-bg: #f5f5f5;
776 | @pre-color: @gray-dark;
777 | @pre-border-color: #ccc;
778 | @pre-scrollable-max-height: 340px;
779 |
780 |
781 | //== Type
782 | //
783 | //##
784 |
785 | //** Text muted color
786 | @text-muted: @gray-light;
787 | //** Abbreviations and acronyms border color
788 | @abbr-border-color: @gray-light;
789 | //** Headings small color
790 | @headings-small-color: @gray-light;
791 | //** Blockquote small color
792 | @blockquote-small-color: @gray-light;
793 | //** Blockquote border color
794 | @blockquote-border-color: @gray-lighter;
795 | //** Page header border color
796 | @page-header-border-color: @gray-lighter;
797 |
798 |
799 | //== Miscellaneous
800 | //
801 | //##
802 |
803 | //** Horizontal line color.
804 | @hr-border: @gray-lighter;
805 |
806 | //** Horizontal offset for forms and lists.
807 | @component-offset-horizontal: 180px;
808 |
809 |
810 | //== Container sizes
811 | //
812 | //## Define the maximum width of `.container` for different screen sizes.
813 |
814 | // Small screen / tablet
815 | @container-tablet: ((720px + @grid-gutter-width));
816 | //** For `@screen-sm-min` and up.
817 | @container-sm: @container-tablet;
818 |
819 | // Medium screen / desktop
820 | @container-desktop: ((940px + @grid-gutter-width));
821 | //** For `@screen-md-min` and up.
822 | @container-md: @container-desktop;
823 |
824 | // Large screen / wide desktop
825 | @container-large-desktop: ((1140px + @grid-gutter-width));
826 | //** For `@screen-lg-min` and up.
827 | @container-lg: @container-large-desktop;
828 |
--------------------------------------------------------------------------------
/footer.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/header.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | ZVulDrill
5 |
6 |
7 |
8 |
9 |
10 |
14 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
38 |
39 |
50 |
53 |
54 |
55 |
56 | 退出
57 |
58 |
59 | 退出
60 |
61 | 登录
62 | 注册
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
--------------------------------------------------------------------------------
/images/default.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/710leo/ZVulDrill/1e9a8da65a4fdd83655d47035bafbf2e3821d37f/images/default.jpg
--------------------------------------------------------------------------------
/index.php:
--------------------------------------------------------------------------------
1 |
5 |
6 |
7 |
8 |
ZVulDrill
9 |
一个简单的Web漏洞演练平台
10 |
11 |
12 |
一个简单的留言板,包含SQL注入,XSS,CSRF等常见的Web漏洞
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/js/.htaccess:
--------------------------------------------------------------------------------
1 | Options -Indexes
--------------------------------------------------------------------------------
/js/bootstrap.min.js:
--------------------------------------------------------------------------------
1 | /*!
2 | * Bootstrap v3.1.0 (http://getbootstrap.com)
3 | * Copyright 2011-2014 Twitter, Inc.
4 | * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
5 | */
6 | if("undefined"==typeof jQuery)throw new Error("Bootstrap requires jQuery");+function(a){"use strict";function b(){var a=document.createElement("bootstrap"),b={WebkitTransition:"webkitTransitionEnd",MozTransition:"transitionend",OTransition:"oTransitionEnd otransitionend",transition:"transitionend"};for(var c in b)if(void 0!==a.style[c])return{end:b[c]};return!1}a.fn.emulateTransitionEnd=function(b){var c=!1,d=this;a(this).one(a.support.transition.end,function(){c=!0});var e=function(){c||a(d).trigger(a.support.transition.end)};return setTimeout(e,b),this},a(function(){a.support.transition=b()})}(jQuery),+function(a){"use strict";var b='[data-dismiss="alert"]',c=function(c){a(c).on("click",b,this.close)};c.prototype.close=function(b){function c(){f.trigger("closed.bs.alert").remove()}var d=a(this),e=d.attr("data-target");e||(e=d.attr("href"),e=e&&e.replace(/.*(?=#[^\s]*$)/,""));var f=a(e);b&&b.preventDefault(),f.length||(f=d.hasClass("alert")?d:d.parent()),f.trigger(b=a.Event("close.bs.alert")),b.isDefaultPrevented()||(f.removeClass("in"),a.support.transition&&f.hasClass("fade")?f.one(a.support.transition.end,c).emulateTransitionEnd(150):c())};var d=a.fn.alert;a.fn.alert=function(b){return this.each(function(){var d=a(this),e=d.data("bs.alert");e||d.data("bs.alert",e=new c(this)),"string"==typeof b&&e[b].call(d)})},a.fn.alert.Constructor=c,a.fn.alert.noConflict=function(){return a.fn.alert=d,this},a(document).on("click.bs.alert.data-api",b,c.prototype.close)}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.isLoading=!1};b.DEFAULTS={loadingText:"loading..."},b.prototype.setState=function(b){var c="disabled",d=this.$element,e=d.is("input")?"val":"html",f=d.data();b+="Text",f.resetText||d.data("resetText",d[e]()),d[e](f[b]||this.options[b]),setTimeout(a.proxy(function(){"loadingText"==b?(this.isLoading=!0,d.addClass(c).attr(c,c)):this.isLoading&&(this.isLoading=!1,d.removeClass(c).removeAttr(c))},this),0)},b.prototype.toggle=function(){var a=!0,b=this.$element.closest('[data-toggle="buttons"]');if(b.length){var c=this.$element.find("input");"radio"==c.prop("type")&&(c.prop("checked")&&this.$element.hasClass("active")?a=!1:b.find(".active").removeClass("active")),a&&c.prop("checked",!this.$element.hasClass("active")).trigger("change")}a&&this.$element.toggleClass("active")};var c=a.fn.button;a.fn.button=function(c){return this.each(function(){var d=a(this),e=d.data("bs.button"),f="object"==typeof c&&c;e||d.data("bs.button",e=new b(this,f)),"toggle"==c?e.toggle():c&&e.setState(c)})},a.fn.button.Constructor=b,a.fn.button.noConflict=function(){return a.fn.button=c,this},a(document).on("click.bs.button.data-api","[data-toggle^=button]",function(b){var c=a(b.target);c.hasClass("btn")||(c=c.closest(".btn")),c.button("toggle"),b.preventDefault()})}(jQuery),+function(a){"use strict";var b=function(b,c){this.$element=a(b),this.$indicators=this.$element.find(".carousel-indicators"),this.options=c,this.paused=this.sliding=this.interval=this.$active=this.$items=null,"hover"==this.options.pause&&this.$element.on("mouseenter",a.proxy(this.pause,this)).on("mouseleave",a.proxy(this.cycle,this))};b.DEFAULTS={interval:5e3,pause:"hover",wrap:!0},b.prototype.cycle=function(b){return b||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(a.proxy(this.next,this),this.options.interval)),this},b.prototype.getActiveIndex=function(){return this.$active=this.$element.find(".item.active"),this.$items=this.$active.parent().children(),this.$items.index(this.$active)},b.prototype.to=function(b){var c=this,d=this.getActiveIndex();return b>this.$items.length-1||0>b?void 0:this.sliding?this.$element.one("slid.bs.carousel",function(){c.to(b)}):d==b?this.pause().cycle():this.slide(b>d?"next":"prev",a(this.$items[b]))},b.prototype.pause=function(b){return b||(this.paused=!0),this.$element.find(".next, .prev").length&&a.support.transition&&(this.$element.trigger(a.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},b.prototype.next=function(){return this.sliding?void 0:this.slide("next")},b.prototype.prev=function(){return this.sliding?void 0:this.slide("prev")},b.prototype.slide=function(b,c){var d=this.$element.find(".item.active"),e=c||d[b](),f=this.interval,g="next"==b?"left":"right",h="next"==b?"first":"last",i=this;if(!e.length){if(!this.options.wrap)return;e=this.$element.find(".item")[h]()}if(e.hasClass("active"))return this.sliding=!1;var j=a.Event("slide.bs.carousel",{relatedTarget:e[0],direction:g});return this.$element.trigger(j),j.isDefaultPrevented()?void 0:(this.sliding=!0,f&&this.pause(),this.$indicators.length&&(this.$indicators.find(".active").removeClass("active"),this.$element.one("slid.bs.carousel",function(){var b=a(i.$indicators.children()[i.getActiveIndex()]);b&&b.addClass("active")})),a.support.transition&&this.$element.hasClass("slide")?(e.addClass(b),e[0].offsetWidth,d.addClass(g),e.addClass(g),d.one(a.support.transition.end,function(){e.removeClass([b,g].join(" ")).addClass("active"),d.removeClass(["active",g].join(" ")),i.sliding=!1,setTimeout(function(){i.$element.trigger("slid.bs.carousel")},0)}).emulateTransitionEnd(1e3*d.css("transition-duration").slice(0,-1))):(d.removeClass("active"),e.addClass("active"),this.sliding=!1,this.$element.trigger("slid.bs.carousel")),f&&this.cycle(),this)};var c=a.fn.carousel;a.fn.carousel=function(c){return this.each(function(){var d=a(this),e=d.data("bs.carousel"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c),g="string"==typeof c?c:f.slide;e||d.data("bs.carousel",e=new b(this,f)),"number"==typeof c?e.to(c):g?e[g]():f.interval&&e.pause().cycle()})},a.fn.carousel.Constructor=b,a.fn.carousel.noConflict=function(){return a.fn.carousel=c,this},a(document).on("click.bs.carousel.data-api","[data-slide], [data-slide-to]",function(b){var c,d=a(this),e=a(d.attr("data-target")||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,"")),f=a.extend({},e.data(),d.data()),g=d.attr("data-slide-to");g&&(f.interval=!1),e.carousel(f),(g=d.attr("data-slide-to"))&&e.data("bs.carousel").to(g),b.preventDefault()}),a(window).on("load",function(){a('[data-ride="carousel"]').each(function(){var b=a(this);b.carousel(b.data())})})}(jQuery),+function(a){"use strict";var b=function(c,d){this.$element=a(c),this.options=a.extend({},b.DEFAULTS,d),this.transitioning=null,this.options.parent&&(this.$parent=a(this.options.parent)),this.options.toggle&&this.toggle()};b.DEFAULTS={toggle:!0},b.prototype.dimension=function(){var a=this.$element.hasClass("width");return a?"width":"height"},b.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass("in")){var b=a.Event("show.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.$parent&&this.$parent.find("> .panel > .in");if(c&&c.length){var d=c.data("bs.collapse");if(d&&d.transitioning)return;c.collapse("hide"),d||c.data("bs.collapse",null)}var e=this.dimension();this.$element.removeClass("collapse").addClass("collapsing")[e](0),this.transitioning=1;var f=function(){this.$element.removeClass("collapsing").addClass("collapse in")[e]("auto"),this.transitioning=0,this.$element.trigger("shown.bs.collapse")};if(!a.support.transition)return f.call(this);var g=a.camelCase(["scroll",e].join("-"));this.$element.one(a.support.transition.end,a.proxy(f,this)).emulateTransitionEnd(350)[e](this.$element[0][g])}}},b.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass("in")){var b=a.Event("hide.bs.collapse");if(this.$element.trigger(b),!b.isDefaultPrevented()){var c=this.dimension();this.$element[c](this.$element[c]())[0].offsetHeight,this.$element.addClass("collapsing").removeClass("collapse").removeClass("in"),this.transitioning=1;var d=function(){this.transitioning=0,this.$element.trigger("hidden.bs.collapse").removeClass("collapsing").addClass("collapse")};return a.support.transition?void this.$element[c](0).one(a.support.transition.end,a.proxy(d,this)).emulateTransitionEnd(350):d.call(this)}}},b.prototype.toggle=function(){this[this.$element.hasClass("in")?"hide":"show"]()};var c=a.fn.collapse;a.fn.collapse=function(c){return this.each(function(){var d=a(this),e=d.data("bs.collapse"),f=a.extend({},b.DEFAULTS,d.data(),"object"==typeof c&&c);!e&&f.toggle&&"show"==c&&(c=!c),e||d.data("bs.collapse",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.collapse.Constructor=b,a.fn.collapse.noConflict=function(){return a.fn.collapse=c,this},a(document).on("click.bs.collapse.data-api","[data-toggle=collapse]",function(b){var c,d=a(this),e=d.attr("data-target")||b.preventDefault()||(c=d.attr("href"))&&c.replace(/.*(?=#[^\s]+$)/,""),f=a(e),g=f.data("bs.collapse"),h=g?"toggle":d.data(),i=d.attr("data-parent"),j=i&&a(i);g&&g.transitioning||(j&&j.find('[data-toggle=collapse][data-parent="'+i+'"]').not(d).addClass("collapsed"),d[f.hasClass("in")?"addClass":"removeClass"]("collapsed")),f.collapse(h)})}(jQuery),+function(a){"use strict";function b(b){a(d).remove(),a(e).each(function(){var d=c(a(this)),e={relatedTarget:this};d.hasClass("open")&&(d.trigger(b=a.Event("hide.bs.dropdown",e)),b.isDefaultPrevented()||d.removeClass("open").trigger("hidden.bs.dropdown",e))})}function c(b){var c=b.attr("data-target");c||(c=b.attr("href"),c=c&&/#[A-Za-z]/.test(c)&&c.replace(/.*(?=#[^\s]*$)/,""));var d=c&&a(c);return d&&d.length?d:b.parent()}var d=".dropdown-backdrop",e="[data-toggle=dropdown]",f=function(b){a(b).on("click.bs.dropdown",this.toggle)};f.prototype.toggle=function(d){var e=a(this);if(!e.is(".disabled, :disabled")){var f=c(e),g=f.hasClass("open");if(b(),!g){"ontouchstart"in document.documentElement&&!f.closest(".navbar-nav").length&&a('
').insertAfter(a(this)).on("click",b);var h={relatedTarget:this};if(f.trigger(d=a.Event("show.bs.dropdown",h)),d.isDefaultPrevented())return;f.toggleClass("open").trigger("shown.bs.dropdown",h),e.focus()}return!1}},f.prototype.keydown=function(b){if(/(38|40|27)/.test(b.keyCode)){var d=a(this);if(b.preventDefault(),b.stopPropagation(),!d.is(".disabled, :disabled")){var f=c(d),g=f.hasClass("open");if(!g||g&&27==b.keyCode)return 27==b.which&&f.find(e).focus(),d.click();var h=" li:not(.divider):visible a",i=f.find("[role=menu]"+h+", [role=listbox]"+h);if(i.length){var j=i.index(i.filter(":focus"));38==b.keyCode&&j>0&&j--,40==b.keyCode&&j
').appendTo(document.body),this.$element.on("click.dismiss.bs.modal",a.proxy(function(a){a.target===a.currentTarget&&("static"==this.options.backdrop?this.$element[0].focus.call(this.$element[0]):this.hide.call(this))},this)),d&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass("in"),!b)return;d?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()}else!this.isShown&&this.$backdrop?(this.$backdrop.removeClass("in"),a.support.transition&&this.$element.hasClass("fade")?this.$backdrop.one(a.support.transition.end,b).emulateTransitionEnd(150):b()):b&&b()};var c=a.fn.modal;a.fn.modal=function(c,d){return this.each(function(){var e=a(this),f=e.data("bs.modal"),g=a.extend({},b.DEFAULTS,e.data(),"object"==typeof c&&c);f||e.data("bs.modal",f=new b(this,g)),"string"==typeof c?f[c](d):g.show&&f.show(d)})},a.fn.modal.Constructor=b,a.fn.modal.noConflict=function(){return a.fn.modal=c,this},a(document).on("click.bs.modal.data-api",'[data-toggle="modal"]',function(b){var c=a(this),d=c.attr("href"),e=a(c.attr("data-target")||d&&d.replace(/.*(?=#[^\s]+$)/,"")),f=e.data("bs.modal")?"toggle":a.extend({remote:!/#/.test(d)&&d},e.data(),c.data());c.is("a")&&b.preventDefault(),e.modal(f,this).one("hide",function(){c.is(":visible")&&c.focus()})}),a(document).on("show.bs.modal",".modal",function(){a(document.body).addClass("modal-open")}).on("hidden.bs.modal",".modal",function(){a(document.body).removeClass("modal-open")})}(jQuery),+function(a){"use strict";var b=function(a,b){this.type=this.options=this.enabled=this.timeout=this.hoverState=this.$element=null,this.init("tooltip",a,b)};b.DEFAULTS={animation:!0,placement:"top",selector:!1,template:'
',trigger:"hover focus",title:"",delay:0,html:!1,container:!1},b.prototype.init=function(b,c,d){this.enabled=!0,this.type=b,this.$element=a(c),this.options=this.getOptions(d);for(var e=this.options.trigger.split(" "),f=e.length;f--;){var g=e[f];if("click"==g)this.$element.on("click."+this.type,this.options.selector,a.proxy(this.toggle,this));else if("manual"!=g){var h="hover"==g?"mouseenter":"focusin",i="hover"==g?"mouseleave":"focusout";this.$element.on(h+"."+this.type,this.options.selector,a.proxy(this.enter,this)),this.$element.on(i+"."+this.type,this.options.selector,a.proxy(this.leave,this))}}this.options.selector?this._options=a.extend({},this.options,{trigger:"manual",selector:""}):this.fixTitle()},b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.getOptions=function(b){return b=a.extend({},this.getDefaults(),this.$element.data(),b),b.delay&&"number"==typeof b.delay&&(b.delay={show:b.delay,hide:b.delay}),b},b.prototype.getDelegateOptions=function(){var b={},c=this.getDefaults();return this._options&&a.each(this._options,function(a,d){c[a]!=d&&(b[a]=d)}),b},b.prototype.enter=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="in",c.options.delay&&c.options.delay.show?void(c.timeout=setTimeout(function(){"in"==c.hoverState&&c.show()},c.options.delay.show)):c.show()},b.prototype.leave=function(b){var c=b instanceof this.constructor?b:a(b.currentTarget)[this.type](this.getDelegateOptions()).data("bs."+this.type);return clearTimeout(c.timeout),c.hoverState="out",c.options.delay&&c.options.delay.hide?void(c.timeout=setTimeout(function(){"out"==c.hoverState&&c.hide()},c.options.delay.hide)):c.hide()},b.prototype.show=function(){var b=a.Event("show.bs."+this.type);if(this.hasContent()&&this.enabled){if(this.$element.trigger(b),b.isDefaultPrevented())return;var c=this,d=this.tip();this.setContent(),this.options.animation&&d.addClass("fade");var e="function"==typeof this.options.placement?this.options.placement.call(this,d[0],this.$element[0]):this.options.placement,f=/\s?auto?\s?/i,g=f.test(e);g&&(e=e.replace(f,"")||"top"),d.detach().css({top:0,left:0,display:"block"}).addClass(e),this.options.container?d.appendTo(this.options.container):d.insertAfter(this.$element);var h=this.getPosition(),i=d[0].offsetWidth,j=d[0].offsetHeight;if(g){var k=this.$element.parent(),l=e,m=document.documentElement.scrollTop||document.body.scrollTop,n="body"==this.options.container?window.innerWidth:k.outerWidth(),o="body"==this.options.container?window.innerHeight:k.outerHeight(),p="body"==this.options.container?0:k.offset().left;e="bottom"==e&&h.top+h.height+j-m>o?"top":"top"==e&&h.top-m-j<0?"bottom":"right"==e&&h.right+i>n?"left":"left"==e&&h.left-i
'}),b.prototype=a.extend({},a.fn.tooltip.Constructor.prototype),b.prototype.constructor=b,b.prototype.getDefaults=function(){return b.DEFAULTS},b.prototype.setContent=function(){var a=this.tip(),b=this.getTitle(),c=this.getContent();a.find(".popover-title")[this.options.html?"html":"text"](b),a.find(".popover-content")[this.options.html?"string"==typeof c?"html":"append":"text"](c),a.removeClass("fade top bottom left right in"),a.find(".popover-title").html()||a.find(".popover-title").hide()},b.prototype.hasContent=function(){return this.getTitle()||this.getContent()},b.prototype.getContent=function(){var a=this.$element,b=this.options;return a.attr("data-content")||("function"==typeof b.content?b.content.call(a[0]):b.content)},b.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(".arrow")},b.prototype.tip=function(){return this.$tip||(this.$tip=a(this.options.template)),this.$tip};var c=a.fn.popover;a.fn.popover=function(c){return this.each(function(){var d=a(this),e=d.data("bs.popover"),f="object"==typeof c&&c;(e||"destroy"!=c)&&(e||d.data("bs.popover",e=new b(this,f)),"string"==typeof c&&e[c]())})},a.fn.popover.Constructor=b,a.fn.popover.noConflict=function(){return a.fn.popover=c,this}}(jQuery),+function(a){"use strict";function b(c,d){var e,f=a.proxy(this.process,this);this.$element=a(a(c).is("body")?window:c),this.$body=a("body"),this.$scrollElement=this.$element.on("scroll.bs.scroll-spy.data-api",f),this.options=a.extend({},b.DEFAULTS,d),this.selector=(this.options.target||(e=a(c).attr("href"))&&e.replace(/.*(?=#[^\s]+$)/,"")||"")+" .nav li > a",this.offsets=a([]),this.targets=a([]),this.activeTarget=null,this.refresh(),this.process()}b.DEFAULTS={offset:10},b.prototype.refresh=function(){var b=this.$element[0]==window?"offset":"position";this.offsets=a([]),this.targets=a([]);{var c=this;this.$body.find(this.selector).map(function(){var d=a(this),e=d.data("target")||d.attr("href"),f=/^#./.test(e)&&a(e);return f&&f.length&&f.is(":visible")&&[[f[b]().top+(!a.isWindow(c.$scrollElement.get(0))&&c.$scrollElement.scrollTop()),e]]||null}).sort(function(a,b){return a[0]-b[0]}).each(function(){c.offsets.push(this[0]),c.targets.push(this[1])})}},b.prototype.process=function(){var a,b=this.$scrollElement.scrollTop()+this.options.offset,c=this.$scrollElement[0].scrollHeight||this.$body[0].scrollHeight,d=c-this.$scrollElement.height(),e=this.offsets,f=this.targets,g=this.activeTarget;if(b>=d)return g!=(a=f.last()[0])&&this.activate(a);if(g&&b<=e[0])return g!=(a=f[0])&&this.activate(a);for(a=e.length;a--;)g!=f[a]&&b>=e[a]&&(!e[a+1]||b<=e[a+1])&&this.activate(f[a])},b.prototype.activate=function(b){this.activeTarget=b,a(this.selector).parentsUntil(this.options.target,".active").removeClass("active");var c=this.selector+'[data-target="'+b+'"],'+this.selector+'[href="'+b+'"]',d=a(c).parents("li").addClass("active");d.parent(".dropdown-menu").length&&(d=d.closest("li.dropdown").addClass("active")),d.trigger("activate.bs.scrollspy")};var c=a.fn.scrollspy;a.fn.scrollspy=function(c){return this.each(function(){var d=a(this),e=d.data("bs.scrollspy"),f="object"==typeof c&&c;e||d.data("bs.scrollspy",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.scrollspy.Constructor=b,a.fn.scrollspy.noConflict=function(){return a.fn.scrollspy=c,this},a(window).on("load",function(){a('[data-spy="scroll"]').each(function(){var b=a(this);b.scrollspy(b.data())})})}(jQuery),+function(a){"use strict";var b=function(b){this.element=a(b)};b.prototype.show=function(){var b=this.element,c=b.closest("ul:not(.dropdown-menu)"),d=b.data("target");if(d||(d=b.attr("href"),d=d&&d.replace(/.*(?=#[^\s]*$)/,"")),!b.parent("li").hasClass("active")){var e=c.find(".active:last a")[0],f=a.Event("show.bs.tab",{relatedTarget:e});if(b.trigger(f),!f.isDefaultPrevented()){var g=a(d);this.activate(b.parent("li"),c),this.activate(g,g.parent(),function(){b.trigger({type:"shown.bs.tab",relatedTarget:e})})}}},b.prototype.activate=function(b,c,d){function e(){f.removeClass("active").find("> .dropdown-menu > .active").removeClass("active"),b.addClass("active"),g?(b[0].offsetWidth,b.addClass("in")):b.removeClass("fade"),b.parent(".dropdown-menu")&&b.closest("li.dropdown").addClass("active"),d&&d()}var f=c.find("> .active"),g=d&&a.support.transition&&f.hasClass("fade");g?f.one(a.support.transition.end,e).emulateTransitionEnd(150):e(),f.removeClass("in")};var c=a.fn.tab;a.fn.tab=function(c){return this.each(function(){var d=a(this),e=d.data("bs.tab");e||d.data("bs.tab",e=new b(this)),"string"==typeof c&&e[c]()})},a.fn.tab.Constructor=b,a.fn.tab.noConflict=function(){return a.fn.tab=c,this},a(document).on("click.bs.tab.data-api",'[data-toggle="tab"], [data-toggle="pill"]',function(b){b.preventDefault(),a(this).tab("show")})}(jQuery),+function(a){"use strict";var b=function(c,d){this.options=a.extend({},b.DEFAULTS,d),this.$window=a(window).on("scroll.bs.affix.data-api",a.proxy(this.checkPosition,this)).on("click.bs.affix.data-api",a.proxy(this.checkPositionWithEventLoop,this)),this.$element=a(c),this.affixed=this.unpin=this.pinnedOffset=null,this.checkPosition()};b.RESET="affix affix-top affix-bottom",b.DEFAULTS={offset:0},b.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(b.RESET).addClass("affix");var a=this.$window.scrollTop(),c=this.$element.offset();return this.pinnedOffset=c.top-a},b.prototype.checkPositionWithEventLoop=function(){setTimeout(a.proxy(this.checkPosition,this),1)},b.prototype.checkPosition=function(){if(this.$element.is(":visible")){var c=a(document).height(),d=this.$window.scrollTop(),e=this.$element.offset(),f=this.options.offset,g=f.top,h=f.bottom;"top"==this.affixed&&(e.top+=d),"object"!=typeof f&&(h=g=f),"function"==typeof g&&(g=f.top(this.$element)),"function"==typeof h&&(h=f.bottom(this.$element));var i=null!=this.unpin&&d+this.unpin<=e.top?!1:null!=h&&e.top+this.$element.height()>=c-h?"bottom":null!=g&&g>=d?"top":!1;if(this.affixed!==i){this.unpin&&this.$element.css("top","");var j="affix"+(i?"-"+i:""),k=a.Event(j+".bs.affix");this.$element.trigger(k),k.isDefaultPrevented()||(this.affixed=i,this.unpin="bottom"==i?this.getPinnedOffset():null,this.$element.removeClass(b.RESET).addClass(j).trigger(a.Event(j.replace("affix","affixed"))),"bottom"==i&&this.$element.offset({top:c-h-this.$element.height()}))}}};var c=a.fn.affix;a.fn.affix=function(c){return this.each(function(){var d=a(this),e=d.data("bs.affix"),f="object"==typeof c&&c;e||d.data("bs.affix",e=new b(this,f)),"string"==typeof c&&e[c]()})},a.fn.affix.Constructor=b,a.fn.affix.noConflict=function(){return a.fn.affix=c,this},a(window).on("load",function(){a('[data-spy="affix"]').each(function(){var b=a(this),c=b.data();c.offset=c.offset||{},c.offsetBottom&&(c.offset.bottom=c.offsetBottom),c.offsetTop&&(c.offset.top=c.offsetTop),b.affix(c)})})}(jQuery);
--------------------------------------------------------------------------------
/js/bootswatch.js:
--------------------------------------------------------------------------------
1 | $('[data-toggle="tooltip"]').tooltip();
--------------------------------------------------------------------------------
/js/bsa.js:
--------------------------------------------------------------------------------
1 | (function(){
2 | var bsa = document.createElement('script');
3 | bsa.type = 'text/javascript';
4 | bsa.async = true;
5 | bsa.src = 'http://s3.buysellads.com/ac/bsa.js';
6 | (document.getElementsByTagName('head')[0]||document.getElementsByTagName('body')[0]).appendChild(bsa);
7 | })();
--------------------------------------------------------------------------------
/js/check.js:
--------------------------------------------------------------------------------
1 | function check()
2 | {
3 | with(document.all){
4 | if(passwd.value!=passwd2.value)
5 | {
6 | alert("密码不一致");
7 | passwd2.value = "";
8 | }
9 | }
10 | }
--------------------------------------------------------------------------------
/message.php:
--------------------------------------------------------------------------------
1 |
9 |
10 |
11 |
12 | #
13 | Column heading
14 |
15 | ';
22 | echo ''.$html['username'].' ';
23 | echo ''.$html['comment_text'].' ';
24 | echo '';
25 | }
26 | ?>
27 |
28 |
29 |
32 |
39 |
40 |
--------------------------------------------------------------------------------
/messageSub.php:
--------------------------------------------------------------------------------
1 | 404 Not Found Not Found
15 | The requested URL ".$_SERVER['PHP_SELF']." was not found on this server.
";
16 | }
17 | ?>
--------------------------------------------------------------------------------
/search.php:
--------------------------------------------------------------------------------
1 |
8 |
9 |
10 |
11 |
12 | #
13 | Column heading
14 |
15 | ';
22 | echo ''.$html['username'].' ';
23 | echo ''.$html['comment_text'].' ';
24 | echo '';
25 | }
26 | if (isset($_SESSION['username']))
27 | {?>
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | 返回
38 |
--------------------------------------------------------------------------------
/setup.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | # This script installs ZVulDrill and all its dependencies on ubuntu 14.04
4 |
5 | sudo apt-get update
6 | sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password password test123'
7 | sudo debconf-set-selections <<< 'mysql-server mysql-server/root_password_again password test123'
8 | sudo apt-get -y install mysql-server apache2 libapache2-mod-auth-mysql php5-mysql php5
9 | sudo cp -r /vagrant/* /var/www/
10 |
11 | sudo sed -i "s/password = '';/password='test123';/g" /var/www/sys/config.php
12 | # No need to change the basedir we just delete it and serve from root
13 | sudo sed -i "/basedir/d" /var/www/sys/config.php
14 |
15 | # Change apache config
16 | sudo sed -i "s|www/html|www|g" /etc/apache2/sites-enabled/000-default.conf
17 |
18 |
19 | # Only create db and insert data when db wasn't created before
20 | if [ ! -d /var/lib/mysql/zvuldrill ]
21 | then
22 | echo "Going to setup database."
23 | sudo mysql -u root -ptest123 -e "CREATE DATABASE zvuldrill;"
24 | sudo mysql -u root -ptest123 --database=zvuldrill < /vagrant/sys/zvuldrill.sql
25 | fi
26 |
27 | sudo service apache2 restart
28 |
--------------------------------------------------------------------------------
/sys/config.php:
--------------------------------------------------------------------------------
1 |
22 |
--------------------------------------------------------------------------------
/sys/lib.php:
--------------------------------------------------------------------------------
1 | 404 Not Found Not Found
26 | The requested URL ".$page." was not found on this server.
";
27 | }
28 | ?>
--------------------------------------------------------------------------------
/sys/zvuldrill.sql:
--------------------------------------------------------------------------------
1 | -- phpMyAdmin SQL Dump
2 | -- version 3.5.1
3 | -- http://www.phpmyadmin.net
4 | --
5 | -- 主机: localhost
6 | -- 生成日期: 2014 年 02 月 25 日 17:54
7 | -- 服务器版本: 5.5.24-log
8 | -- PHP 版本: 5.3.13
9 |
10 | SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
11 | SET time_zone = "+00:00";
12 |
13 |
14 | /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
15 | /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
16 | /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
17 | /*!40101 SET NAMES utf8 */;
18 |
19 | --
20 | -- 数据库: `zvuldrill`
21 | --
22 |
23 | -- --------------------------------------------------------
24 |
25 | --
26 | -- 表的结构 `admin`
27 | --
28 |
29 | CREATE TABLE IF NOT EXISTS `admin` (
30 | `admin_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
31 | `admin_name` varchar(255) NOT NULL DEFAULT '',
32 | `admin_pass` varchar(255) NOT NULL DEFAULT '',
33 | PRIMARY KEY (`admin_id`)
34 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=2 ;
35 |
36 | --
37 | -- 转存表中的数据 `admin`
38 | --
39 |
40 | INSERT INTO `admin` (`admin_id`, `admin_name`, `admin_pass`) VALUES
41 | (1, 'admin', 'd033e22ae348aeb5660fc2140aec35850c4da997');
42 |
43 | -- --------------------------------------------------------
44 |
45 | --
46 | -- 表的结构 `comment`
47 | --
48 |
49 | CREATE TABLE IF NOT EXISTS `comment` (
50 | `comment_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
51 | `user_name` varchar(255) NOT NULL,
52 | `comment_text` varchar(255) NOT NULL DEFAULT '',
53 | `pub_date` date NOT NULL,
54 | PRIMARY KEY (`comment_id`)
55 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
56 |
57 | -- --------------------------------------------------------
58 |
59 | --
60 | -- 表的结构 `users`
61 | --
62 |
63 | CREATE TABLE IF NOT EXISTS `users` (
64 | `user_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
65 | `user_name` varchar(255) NOT NULL DEFAULT '',
66 | `user_pass` varchar(255) NOT NULL DEFAULT '',
67 | `user_avatar` varchar(255) NOT NULL DEFAULT '',
68 | `user_bio` varchar(255) NOT NULL DEFAULT '',
69 | `join_date` date NOT NULL,
70 | PRIMARY KEY (`user_id`)
71 | ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
72 |
73 | /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
74 | /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
75 | /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
76 |
--------------------------------------------------------------------------------
/user/.htaccess:
--------------------------------------------------------------------------------
1 | Options -Indexes
--------------------------------------------------------------------------------
/user/edit.php:
--------------------------------------------------------------------------------
1 |
13 |
14 |
15 |
16 |
23 |
24 |
25 |
26 |
32 |
39 |
40 |
41 |
42 |
43 |
50 |
57 |
58 |
59 |
--------------------------------------------------------------------------------
/user/logCheck.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/user/login.php:
--------------------------------------------------------------------------------
1 |
10 |
11 | 登录
12 |
18 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/user/logout.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/user/reg.php:
--------------------------------------------------------------------------------
1 |
10 |
11 | 注册
12 |
18 |
24 |
31 |
32 |
33 |
36 |
--------------------------------------------------------------------------------
/user/regCheck.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/user/updateAvatar.php:
--------------------------------------------------------------------------------
1 | ';
20 | echo '返回 ';
21 | }
22 | }
23 | else {
24 | not_find($_SERVER['PHP_SELF']);
25 | }
26 | ?>
--------------------------------------------------------------------------------
/user/updateName.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/user/updatePass.php:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/user/user.php:
--------------------------------------------------------------------------------
1 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/有漏洞注释版本ZVulDrill.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/710leo/ZVulDrill/1e9a8da65a4fdd83655d47035bafbf2e3821d37f/有漏洞注释版本ZVulDrill.zip
--------------------------------------------------------------------------------