其他¶
无效的CSRF令牌¶
GeoNetwork有一个防止CSRF攻击的安全过滤器。查看有关此类攻击的详细信息https://www.owasp.org/index.php/Cross-Site_Request_伪造_(CSRF)。所有调用POST、DELETE和PUT端点时,如果没有适当的标记,将返回一个错误。
默认情况下,所有AngularJS请求都将处理此令牌,但所有第三方api和自定义用户界面调用都必须手动将此令牌添加到请求中。令牌存储在名为XSRF-token的cookie中。这个cookie构造一个字符串,该字符串必须通过名为“_csrf”的参数或名为X-XSRF-TOKEN的头添加到所有请求中。
使用curl的CSRF调用示例¶
首先,调用POST端点以获取会话和csrf
$rm -f /tmp/cookie; curl -c /tmp/cookie http://localhost:8080/geonetwork/srv/eng/info?type=me -X POST ; cat /tmp/cookie
<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
<title>Error 403 Expected CSRF token not found. Has your session expired?</title>
</head>
<body><h2>HTTP ERROR 403</h2>
<p>Problem accessing /geonetwork/srv/eng/info. Reason:
<pre> Expected CSRF token not found. Has your session expired?</pre></p><hr><a href="http://eclipse.org/jetty">Powered by Jetty:// 9.3.9.v20160517</a><hr/>
</body>
</html>
# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
localhost FALSE /geonetwork FALSE 0 XSRF-TOKEN 3825c5f1-49b3-4c62-bc3a-1916d5872d02
然后,使用cookie和令牌,您可以做任何您想做的事情:
$curl -v -X POST "http://localhost:8080/geonetwork/srv/eng/info?type=me" -H "X-XSRF-TOKEN: 3825c5f1-49b3-4c62-bc3a-1916d5872d02" --user admin:admin -b /tmp/cookie
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 8080 (#0)
* Server auth using Basic with user 'admin'
> POST /geonetwork/srv/eng/info?type=me HTTP/1.1
> Host: localhost:8080
> Authorization: Basic YWRtaW46YWRtaW4=
> User-Agent: curl/7.52.1
> Accept: */*
> Cookie: XSRF-TOKEN=3825c5f1-49b3-4c62-bc3a-1916d5872d02
> X-XSRF-TOKEN: 3825c5f1-49b3-4c62-bc3a-1916d5872d02
>
< HTTP/1.1 200 OK
< Date: Wed, 17 May 2017 08:52:05 GMT
* Added cookie JSESSIONID="1na1v7dpu7d7bcsnelvh0vnvn" for domain localhost, path /geonetwork, expire 0
< Set-Cookie: JSESSIONID=1na1v7dpu7d7bcsnelvh0vnvn;Path=/geonetwork
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
* Added cookie serverTime="1495011125647" for domain localhost, path /, expire 0
< Set-Cookie: serverTime=1495011125647;Path=/
* Added cookie sessionExpiry="1495011125647" for domain localhost, path /, expire 0
< Set-Cookie: sessionExpiry=1495011125647;Path=/
< Content-Type: application/xml; charset=UTF-8
< Pragma: no-cache
< Cache-Control: no-cache
< Expires: -1
< Transfer-Encoding: chunked
< Server: Jetty(9.3.9.v20160517)
<
<?xml version="1.0" encoding="UTF-8"?>
<info>
<me authenticated="true">
<profile>Administrator</profile>
<username>admin</username>
<id>1</id>
<name>admin</name>
<surname>admin</surname>
<email />
<organisation />
<hash />
</me>
<env>
<baseURL>/geonetwork</baseURL>
<node>srv</node>
</env>
</info>
* Curl_http_done: called premature == 0
* Connection #0 to host localhost left intact
使用H2数据库¶
重要
以下说明仅用于检查数据库以排除故障,因为使用此方法可能会损坏数据库。在做任何更改之前,请先备份!
如果您使用的是默认的嵌入式H2数据库,并且需要检查表,那么可以使用图形用户界面进行检查。两个已经过测试的是:
以下方法使用h2工具。
查找Geonetwork数据库¶
这叫做 gn.h2.db
. 位置取决于您使用的web服务器以及数据目录的位置。见 配置数据库 更多信息。注意,在windows上,您需要使用表单的路径 driveletter/path/to/gn.h2.db
.
使用H2工具¶
从下载独立于平台的zip文件http://www.h2database.com/html/download.html打开/取出。在命令提示下,更改到以下目录:
h2/bin
请注意,使用附带的bat或shell脚本访问数据库似乎会显示错误,因此建议使用命令提示符方法。
记下数据库的URL。其形式如下:
jdbc:h2:path/to/gn
注释不包括 .h2.db
在路的尽头。
键入以下命令以访问该工具:
java -cp h2*.jar org.h2.tools.shell
你将被要求提供网址,你在上面做了一个记录。默认凭据为:
用户名:www data
密码:www data
您可能需要执行以下操作之一:
关闭GeoNetwork
删除锁定文件
gn.lock.db
授予对的写权限
gn.h2.db
成功连接后,您将看到如下提示,您可以在其中输入SQL命令。以分号结尾。
sql>
一个有用的命令引用可以在http://www.h2database.com/html/commands.html
要离开工具,请键入 quit
然后按回车键。