hitoshura25/cvefixes huggingface dataset:
CVE-2024-39698 (Markdown, published 2024-07-09T18:15Z)
Description: value: electron-updater allows for automatic updates for Electron apps. The file `packages/electron-updater/src/windowsExecutableCodeSignatureVerifier.ts` implements the signature validation routine for Electron applications on Windows. Because of the surrounding shell, a first pass by `cmd.exe` expands any environment variable found in command-line above. This creates a situation where `verifySignature()` can be tricked into validating the certificate of a different file than the one that was just downloaded. If the step is successful, the malicious update will be executed even if its signature is invalid. This attack assumes a compromised update manifest (server compromise, Man-in-the-Middle attack if fetched over HTTP, Cross-Site Scripting to point the application to a malicious updater server, etc.). The patch is available starting from 6.3.0-alpha.6.
Severity: nan (CVSS v3 base score: 7.5)
Weakness: CWE-295 \u2014 Improper Certificate Validation
The product does not validate, or incorrectly validates, a certificate.
Repository: https://github.com/electron-userland/electron-builder
Files changed:
.changeset/nervous-carrots-begin.md
packages/electron-updater/src/windowsExecutableCodeSignatureVerifier.ts
Commit message: fix: verify LiteralPath of update file during windows signature verification (#8295)



Vulnerable code:
  delete data.Path

Fixed code:
---
"electron-updater": patch
---

fix: verify LiteralPath of update file during windows signature verification
import * as path from "path"
            try {
              const normlaizedUpdateFilePath = path.normalize(data.Path)
              const normalizedTempUpdateFile = path.normalize(unescapedTempUpdateFile)
              logger.info(`LiteralPath: ${normlaizedUpdateFilePath}. Update Path: ${normalizedTempUpdateFile}`)
              if (normlaizedUpdateFilePath !== normalizedTempUpdateFile) {
                handleError(logger, new Error(`LiteralPath of ${normlaizedUpdateFilePath} is different than ${normalizedTempUpdateFile}`), stderr, reject)
                resolve(null)
                return
              }
            } catch (error: any) {
              logger.warn(`Unable to verify LiteralPath of update asset due to missing data.Path. Skipping this step of validation. Message: ${error.message ?? error.stack}`)
            }
CVE-2018-19620 (PHP, published 2018-11-28T08:29Z)
Description: value: ShowDoc 2.4.1 allows remote attackers to edit other users' notes by navigating with a modified page_id.
Severity: MEDIUM (CVSS v3 base score: 4.3)
Weakness: CWE-425 \u2014 Direct Request ('Forced Browsing')
The web application does not adequately enforce appropriate authorization on all restricted URLs, scripts, or files.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Controller/CatalogController.class.php
Commit message: Update CatalogController.class.php

Vulnerable code:

Fixed code:
            $cat = D("Catalog")->where(" cat_id = '$cat_id' ")->find();
            $item_id = $cat['item_id']; 
            if (!$this->checkItemPermn($login_user['uid'] , $item_id)) {
                $this->sendError(10103);
                return;
            }
CVE-2021-3678 (Unknown, published 2021-08-04T14:15Z)
Description: value: showdoc is vulnerable to Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
Severity: MEDIUM (CVSS v3 base score: 5.9)
Weakness: CWE-338 \u2014 Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
The product uses a Pseudo-Random Number Generator (PRNG) in a security context, but the PRNG's algorithm is not cryptographically strong.
Repository: https://github.com/star7th/showdoc
Files changed:
Commit message: Merge pull request #1438 from michaellrowley/security-patch

CVE-2021-3678 Patch

Vulnerable code:

Fixed code:
CVE-2021-3680 (Unknown, published 2021-08-04T13:15Z)
Description: value: showdoc is vulnerable to Missing Cryptographic Step
Severity: MEDIUM (CVSS v3 base score: 4.9)
Weakness: CWE-347 \u2014 Improper Verification of Cryptographic Signature
The product does not verify, or incorrectly verifies, the cryptographic signature for data.
Repository: https://github.com/star7th/showdoc
Files changed:
Commit message: Merge pull request #1438 from michaellrowley/security-patch

CVE-2021-3678 Patch

Vulnerable code:

Fixed code:
CVE-2021-3683 (PHP, published 2021-11-13T10:15Z)
Description: value: showdoc is vulnerable to Cross-Site Request Forgery (CSRF)
Severity: MEDIUM (CVSS v3 base score: 6.5)
Weakness: CWE-352 \u2014 Cross-Site Request Forgery (CSRF)
The web application does not, or can not, sufficiently verify whether a well-formed, valid, consistent request was intentionally provided by the user who submitted the request.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Controller/UserController.class.php
Commit message: Strict cookie


Vulnerable code:
                    cookie('cookie_token',$token,array('expire'=>60*60*24*90,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                  $this->sendResult(array(
          cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                    cookie('cookie_token',$token,array('expire'=>60*60*24*90,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                    

Fixed code:
                    if(version_compare(PHP_VERSION,'7.3.0','>')){
                        setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
                      }else{
                        cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
                    }
                    $this->sendResult(array(
          if(version_compare(PHP_VERSION,'7.3.0','>')){
            setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
          }else{
            cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
          }
                    if(version_compare(PHP_VERSION,'7.3.0','>')){
                        setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
                      }else{
                        cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
                    }
CVE-2021-3775 (PHP, published 2021-11-13T10:15Z)
Description: value: showdoc is vulnerable to Cross-Site Request Forgery (CSRF)
Severity: MEDIUM (CVSS v3 base score: 5.4)
Weakness: CWE-352 \u2014 Cross-Site Request Forgery (CSRF)
The web application does not, or can not, sufficiently verify whether a well-formed, valid, consistent request was intentionally provided by the user who submitted the request.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Controller/UserController.class.php
Commit message: Strict cookie


Vulnerable code:
                    cookie('cookie_token',$token,array('expire'=>60*60*24*90,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                  $this->sendResult(array(
          cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                    cookie('cookie_token',$token,array('expire'=>60*60*24*90,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                    

Fixed code:
                    if(version_compare(PHP_VERSION,'7.3.0','>')){
                        setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
                      }else{
                        cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
                    }
                    $this->sendResult(array(
          if(version_compare(PHP_VERSION,'7.3.0','>')){
            setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
          }else{
            cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
          }
                    if(version_compare(PHP_VERSION,'7.3.0','>')){
                        setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
                      }else{
                        cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
                    }
CVE-2021-3776 (PHP, published 2021-11-13T10:15Z)
Description: value: showdoc is vulnerable to Cross-Site Request Forgery (CSRF)
Severity: MEDIUM (CVSS v3 base score: 5.4)
Weakness: CWE-352 \u2014 Cross-Site Request Forgery (CSRF)
The web application does not, or can not, sufficiently verify whether a well-formed, valid, consistent request was intentionally provided by the user who submitted the request.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Controller/UserController.class.php
Commit message: Strict cookie


Vulnerable code:
                    cookie('cookie_token',$token,array('expire'=>60*60*24*90,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                  $this->sendResult(array(
          cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                    cookie('cookie_token',$token,array('expire'=>60*60*24*90,'httponly'=>'httponly'));//此处由服务端控制token是否过期，所以cookies过期时间设置多久都无所谓
                    

Fixed code:
                    if(version_compare(PHP_VERSION,'7.3.0','>')){
                        setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
                      }else{
                        cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
                    }
                    $this->sendResult(array(
          if(version_compare(PHP_VERSION,'7.3.0','>')){
            setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
          }else{
            cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
          }
                    if(version_compare(PHP_VERSION,'7.3.0','>')){
                        setcookie('cookie_token',$token,array('expires'=>time()+60*60*24*180,'httponly'=>'httponly','samesite' => 'Strict','path'=>'/'));
                      }else{
                        cookie('cookie_token',$token,array('expire'=>60*60*24*180,'httponly'=>'httponly'));
                    }
CVE-2021-3990 (PHP, published 2021-12-01T11:15Z)
Description: value: showdoc is vulnerable to Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
Severity: MEDIUM (CVSS v3 base score: 6.5)
Weakness: CWE-338 \u2014 Use of Cryptographically Weak Pseudo-Random Number Generator (PRNG)
The product uses a Pseudo-Random Number Generator (PRNG) in a security context, but the PRNG's algorithm is not cryptographically strong.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Controller/AdminSettingController.class.php
server/Application/Api/Model/UserModel.class.php
server/Application/Common/Common/function.php
Commit message: Enhanced LDAP user password / 增强ldap用户密码


Vulnerable code:
                    D("User")->register($ldap_user,$ldap_user.time());
                        D("User")->register($ldap_user,$ldap_user.time());
                        D("User")->register($ldap_user,$ldap_user.time());

Fixed code:
                    D("User")->register($ldap_user,$ldap_user.get_rand_str());
                        D("User")->register($ldap_user,$ldap_user.get_rand_str());
                        D("User")->register($ldap_user,$ldap_user.get_rand_str());
}

// 获取随机字符串
function get_rand_str($len = 32 ){
    // 对于php7以上版本，可利用random_bytes产生随机
    if(version_compare(PHP_VERSION,'7.0','>')){
        $rand = bin2hex( random_bytes( 16 ) ); 
        return substr($rand,0,$len); 
    }else{
        // 对于低版本，只好尽量加大长度实现伪随机，增大暴力破解难度
        $s1 = microtime(true).time().rand().rand().rand().microtime(true).time().rand().rand().rand();
        $s2 = microtime(true).time().rand().rand().rand().microtime(true).time().rand().rand().rand();
        $md5 = md5($s2.base64_encode($s1));
        return substr($md5,0,$len);
    }
CVE-2021-3993 (PHP, published 2021-12-01T11:15Z)
Description: value: showdoc is vulnerable to Cross-Site Request Forgery (CSRF)
Severity: MEDIUM (CVSS v3 base score: 6.5)
Weakness: CWE-352 \u2014 Cross-Site Request Forgery (CSRF)
The web application does not, or can not, sufficiently verify whether a well-formed, valid, consistent request was intentionally provided by the user who submitted the request.
Repository: https://github.com/star7th/showdoc
Files changed:
server/index.php
Commit message: Cookie security /Cookie 安全


Vulnerable code:

Fixed code:
// cookie安全，给PHPSESSID加上Strict
if (PHP_VERSION_ID >= 70300) {
    session_set_cookie_params([
        'samesite' => 'Strict'
    ]);
} else { 
    session_set_cookie_params(
        NULL,
        '/; samesite=Strict',
    );
}
CVE-2021-4017 (PHP, published 2021-12-01T11:15Z)
Description: value: showdoc is vulnerable to Cross-Site Request Forgery (CSRF)
Severity: MEDIUM (CVSS v3 base score: 8.8)
Weakness: CWE-352 \u2014 Cross-Site Request Forgery (CSRF)
The web application does not, or can not, sufficiently verify whether a well-formed, valid, consistent request was intentionally provided by the user who submitted the request.
Repository: https://github.com/star7th/showdoc
Files changed:
server/index.php
Commit message: Cookie security /Cookie 安全


Vulnerable code:

Fixed code:
// cookie安全，给PHPSESSID加上Strict
if (PHP_VERSION_ID >= 70300) {
    session_set_cookie_params([
        'samesite' => 'Strict'
    ]);
} else { 
    session_set_cookie_params(
        NULL,
        '/; samesite=Strict',
    );
}
CVE-2022-0079 (Unknown, published 2022-01-03T03:15Z)
Description: value: showdoc is vulnerable to Generation of Error Message Containing Sensitive Information
Severity: MEDIUM (CVSS v3 base score: 5.3)
Weakness: CWE-209 \u2014 Generation of Error Message Containing Sensitive Information
The product generates an error message that includes sensitive information about its environment, users, or associated data.
Repository: https://github.com/star7th/showdoc
Files changed:
Commit message: Merge branch 'v2.10.0'


Vulnerable code:

Fixed code:
CVE-2022-0362 (PHP, published 2022-01-26T13:15Z)
Description: value: SQL Injection in Packagist showdoc/showdoc prior to 2.10.3.
Severity: HIGH (CVSS v3 base score: 9.8)
Weakness: CWE-89 \u2014 Improper Neutralization of Special Elements used in an SQL Command ('SQL Injection')
The product constructs all or part of an SQL command using externally-influenced input from an upstream component, but it does not neutralize or incorrectly neutralizes special elements that could modify the intended SQL command when it is sent to a downstream component. Without sufficient removal or quoting of SQL syntax in user-controllable inputs, the generated SQL query can cause those inputs to be interpreted as SQL instead of ordinary user data.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Controller/AdminUserController.class.php
Commit message: bug


Vulnerable code:
        $uid = I("post.uid");

Fixed code:
        $uid = I("post.uid/d");
CVE-2022-0409 (PHP, published 2022-02-19T05:15Z)
Description: value: Unrestricted Upload of File with Dangerous Type in Packagist showdoc/showdoc prior to 2.10.2.
Severity: MEDIUM (CVSS v3 base score: 7.8)
Weakness: CWE-434 \u2014 Unrestricted Upload of File with Dangerous Type
The product allows the upload or transfer of dangerous file types that are automatically processed within its environment.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Controller/AttachmentController.class.php
server/Application/Api/Model/AttachmentModel.class.php
Commit message: File upload vulnerability


Vulnerable code:
        
        if (strstr(strip_tags(strtolower($_FILES['editormd-image-file']['name'])), ".php") 
            || strstr(strip_tags(strtolower($_FILES['editormd-image-file']['name'])), ".htm") 
            || strstr(strip_tags(strtolower($_FILES['editormd-image-file']['name'])), ".svg") 
            ) {
        
        if (strstr(strip_tags(strtolower($uploadFile['name'])), ".php") 
            || strstr(strip_tags(strtolower($uploadFile['name'])), ".htm") 
            || strstr(strip_tags(strtolower($uploadFile['name'])), ".svg") 
            
            ) {
		if (strstr(strip_tags(strtolower($uploadFile['name'])), ".php")
		||  strstr(strip_tags(strtolower($uploadFile['name'])), ".php")
		||  strstr(strip_tags(strtolower($uploadFile['name'])), ".svg")
		
		) {
	}

Fixed code:

        if(D("Attachment")->isDangerFilename($_FILES['editormd-image-file']['name'])){

        if(D("Attachment")->isDangerFilename($uploadFile['name'])){
		if($this->isDangerFilename($uploadFile['name'])){
		}

	// 判断文件名是否包含危险的扩展名
	public function isDangerFilename($filename){

		$isDangerStr = function ($filename , $keyword){
			if(strstr(strip_tags(strtolower( $filename )), $keyword) ){
				return true ;
			}
			return false;
		};
		if (
			 $isDangerStr($filename , ".php")
			|| $isDangerStr($filename , ".svg")
			|| $isDangerStr($filename , ".htm")
			|| $isDangerStr($filename , "%")
		) {
			return true;
		}
	
		return false;
	}
CVE-2022-0880 (PHP, published 2022-03-12T04:15Z)
Description: value: Cross-site Scripting (XSS) - Stored in GitHub repository star7th/showdoc prior to 2.10.2.
Severity: LOW (CVSS v3 base score: 5.4)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Model/AttachmentModel.class.php
Commit message: file upload bug


Vulnerable code:

Fixed code:
			|| $isDangerStr($filename , ".xml")
CVE-2022-0937 (PHP, published 2022-03-14T03:15Z)
Description: value: Stored xss in showdoc through file upload in GitHub repository star7th/showdoc prior to 2.10.4.
Severity: LOW (CVSS v3 base score: 5.4)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Model/AttachmentModel.class.php
Commit message: file upload bug


Vulnerable code:

Fixed code:
			|| $isDangerStr($filename , ".shtm")
CVE-2022-0938 (Unknown, published 2022-03-14T08:15Z)
Description: value: Stored XSS via file upload in GitHub repository star7th/showdoc prior to v2.10.4.
Severity: LOW (CVSS v3 base score: 5.4)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/star7th/showdoc
Files changed:
Commit message: Merge pull request #1628 from ajaysenr/master

Update AttachmentModel.class.php

Vulnerable code:

Fixed code:
CVE-2022-0940 (Unknown, published 2022-03-14T11:15Z)
Description: value: Stored XSS due to Unrestricted File Upload in GitHub repository star7th/showdoc prior to v2.10.4.
Severity: LOW (CVSS v3 base score: 5.4)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/star7th/showdoc
Files changed:
Commit message: Merge pull request #1629 from ajaysenr/master

Update AttachmentModel.class.php

Vulnerable code:

Fixed code:
CVE-2022-0941 (Unknown, published 2022-03-14T13:15Z)
Description: value: Stored XSS due to Unrestricted File Upload in GitHub repository star7th/showdoc prior to v2.10.4.
Severity: LOW (CVSS v3 base score: 5.4)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/star7th/showdoc
Files changed:
Commit message: Merge pull request #1630 from ajaysenr/master

Update AttachmentModel.class.php

Vulnerable code:

Fixed code:
CVE-2022-0942 (PHP, published 2022-03-15T14:15Z)
Description: value: Stored XSS due to Unrestricted File Upload in GitHub repository star7th/showdoc prior to 2.10.4.
Severity: LOW (CVSS v3 base score: 5.4)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Model/AttachmentModel.class.php
Commit message: Upload file vulnerability


Vulnerable code:
	public function upload($_files , $file_key , $uid , $item_id = 0  , $page_id = 0  ){
		if( !$this->isAllowedFilename($_files[$file_key]['name']) ){
			'.mp3','.wav','.mp4',
			'.mov','.webmv','.flac','.mkv',
			'.pdf','.ofd','.swf','.epub','.xps',
			'.doc','.docx','.wps',
			) ;

Fixed code:
	public function upload($_files , $file_key , $uid , $item_id = 0  , $page_id = 0 , $check_filename = true  ){
		if( $check_filename && !$this->isAllowedFilename($_files[$file_key]['name']) ){
			'.mp3','.wav','.mp4','.mov','.flac','.mkv',
			'.pdf','.epub','.xps','.doc','.docx','.wps',
		) ;
CVE-2022-0945 (PHP, published 2022-03-15T04:15Z)
Description: value: Stored XSS viva axd and cshtml file upload in star7th/showdoc in GitHub repository star7th/showdoc prior to v2.10.4.
Severity: LOW (CVSS v3 base score: 5.4)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Model/AttachmentModel.class.php
Commit message: bug


Vulnerable code:

Fixed code:
			|| $isDangerStr($filename , ".cshtml")
			|| $isDangerStr($filename , ".axd")
CVE-2022-0946 (PHP, published 2022-03-14T14:15Z)
Description: value: Stored XSS viva cshtm file upload in GitHub repository star7th/showdoc prior to v2.10.4.
Severity: LOW (CVSS v3 base score: 5.4)
Weakness: CWE-79 \u2014 Improper Neutralization of Input During Web Page Generation ('Cross-site Scripting')
The product does not neutralize or incorrectly neutralizes user-controllable input before it is placed in output that is used as a web page that is served to other users.
Repository: https://github.com/star7th/showdoc
Files changed:
server/Application/Api/Model/AttachmentModel.class.php
Commit message: bug


Vulnerable code:

Fixed code:
			|| $isDangerStr($filename , "htm")