@@ -2709,18 +2709,36 @@
2709 2709 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if( sqlite3_strglob("*iPad*", zAgent)==0 ) return 0;
2710 2710 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
return sqlite3_strlike("%mobile%", zAgent, 0)==0;
2711 2711 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
}
2712 2712 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
2713 2713 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
/*
2714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** If the CGI environment contains any parameters which were not
2715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** fetched via P(), PD(), or equivalent, its value is passed to
2716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** cgi_value_spider_check(), fatally failing if the value looks to be
2717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** malicious. The intent is to block attempts at attacks which post
2718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** apparent SQL injection attempts using arbitrary query parameter
2719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- ** names.
2714 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Look for query or POST parameters that:
2715 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2716 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (1) Have not been used
2717 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** (2) Appear to be malicious attempts to break into or otherwise
2718 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** harm the system, for example via SQL injection
2719 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2720 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** If any such parameters are seen, a 418 ("I'm a teapot") return is
2721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** generated and processing aborts - this routine does not return.
2722 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2723 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** When Fossil is launched via CGI from althttpd, the 418 return signals
2724 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** the webserver to put the requestor IP address into "timeout", blocking
2725 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** subsequent requests for 5 minutes.
2726 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2727 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Fossil is not subject to any SQL injections, as far as anybody knows.
2728 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** This routine is not necessary for the security of the system (though
2729 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** an extra layer of security never hurts). The main purpose here is
2730 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** to shutdown malicious attack spiders and prevent them from burning
2731 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** lots of CPU cycles and bogging down the website. In other words, the
2732 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** objective of this routine is to help prevent denial-of-service.
2733 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ **
2734 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** Usage Hint: Put a call to this routine as late in the webpage
2735 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** implementation as possible, ideally just before it begins doing
2736 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** potentially CPU-intensive computations and after all query parameters
2737 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ ** have been consulted.
2720 2738 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
*/
2721 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
- void verify_all_options_cgi(void){
2739 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
+ void cgi_check_for_malice(void){
2722 2740 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
struct QParam * pParam;
2723 2741 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
int i;
2724 2742 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
for(i = 0; i < nUsedQP; ++i){
2725 2743 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
pParam = &aParamQP[i];
2726 2744 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!
if(0 == pParam->isFetched
2727 2745 { copied = false; pop = false }, 1000)" :class="copied && 'copied'">Copy link Copied!